最近在使用mongoose開發嵌入式web后端時,會遇到要解析js前端發送過來的http消息,比如傳遞用戶名,密碼過來,后端要解析出來并判斷是否登錄成功。
前端http有兩種組裝字段的方式。
第一種是 $.ajax({url: '/upgradePackage',method: 'POST',dataType: 'json',data: { devID: $('#curDevID').val(), type: $('#moduleName').val(), packageName: selectFile.name },success: function(json) {}});
這個時候,參數會用=和&拼接起來,mongoose解析要用char szUser[32] = {0};mg_http_get_var(&httpReq->body, "username", szUser, sizeof(szUser));這種方式。還有一種js前端采用json的格式發送,fetch('/login', { method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify({ username, password })
})
.then(response => response.json())
.then(data => {console.log('data.result = ' + data.result);if (data.result === 0) {window.location.href = '/dashboard'; } else {alert('登錄失敗:用戶名或密碼錯誤!'); }
})
.catch(error => console.error('Error:', error));
這個時候mongoose的解析方式要換成
struct mg_str json = mg_str(httpReq->body.buf);char* szUser = mg_json_get_str(json, "$.username");printf("username=%s\n", szUser);
之前對前端不熟悉,用mongoose解析的時候,老是不能取得正確的值,網上給出的解析一會兒是方式一,一會兒是方式二,把人都繞暈了。只有搞清楚里面的邏輯,才能清晰認識到該干什么,對于不熟悉的領域,唯一能做的就是投入時間學習。