![](/img/trans.png)
[英]Javascript (node.js) array to specific string format (similar to JSON)
[英]JavaScript & Node.js - Incorrect JSON string in controller function
JavaScript&Node.js-控制器函數中的json字符串不正確
我通過ajax將JSON發送到Node.js中的路由。 但是當我在node.js函數中獲取req.body時,JSON看起來不正確。 我想念什么?
JavaScript:
var getID = $('.input-id').val();
var getName = $('.input-name').val();
var books = $('.select-books').val();
var books = books.map(function(book) {
return {id: book};
});
var dataaddID = {};
dataaddID['add'] = { id : getID, name : getName, books };
var jsonaddID = JSON.stringify(dataaddID);
console.log(jsonaddID);
$.ajax({
url:'/books/add',
type:'POST',
headers: {'X-CSRF-Token': csrfKey},
dataType: 'json',
data: jsonaddID,
success:function(data){
console.log(data);
}
});
控制台結果:
{"add":{"id":"T1088","name":"Zynula","books":[{"id":"1"},{"id":"2"}]}}
Node.js路由/功能
postBooks: async (req, res, next) => {
console.log(req.body);
var getBody = JSON.stringify(req.body);
console.log(getBody);
}
奇怪的結果:
{ '{"add":{"id":"T1088","name":"Zynula","books":': { '{"id":"1"},{"id":"2"}': '' } }
{"{\"add\":{\"id\":\"T1088\",\"name\":\"Zynula\",\"books\":":{"{\"id\":\"1\"},{\"id\":\"2\"}":""}}
預期結果:
{"add":{"id":"T1088","name":"Zynula","books":[{"id":"1"},{"id":"2"}]}}
...
發送數據之前,請嘗試不使用JSON.stringify()
。 我相信Ajax會為您序列化它。
我研究了Express中的解析。 沒有檢查所有詳細信息,原因是,如果您將數據作為字符串傳遞:
{"add":{"id":"T1088","name":"Zynula","books":[{"id":"1"},{"id":"2"}]}}
然后,缺少應該將內容解釋為JSON的標頭,並且解析器將解釋參數是否以key[subKey]=value
的形式傳入名稱/值對,因此解析器將其拆分為以下形式:
{"add":{"id":"T1088","name":"Zynula","books":
[
{"id":"1"},{"id":"2"}
]
}}
因此{"add":{"id":"T1088","name":"Zynula","books":
id是第一個鍵,而{"id":"1"},{"id":"2"}
子項和最后}}
被忽略,以便值是''
。
因此,要么在不使用stringify的情況下將其作為對象傳遞(例如Dev Yego ),然后jQuery就會為您序列化數據,並添加正確的標頭,告訴服務器是application/x-www-form-urlencoded
(格式為jQuery,如果格式化為)。
如果將數據發送到的API需要JSON,則需要添加自己的正確標頭:
data: JSON.stringify(yourData),
contentType: 'application/json; charset=utf-8',
而不是嘗試
var sendBody = JSON.stringify(req.body);
嘗試
var sendBody = JSON.parse(req.body);
你會得到答案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.