簡體   English   中英

JavaScript&Node.js-控制器功能中的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM