Node / Express服务器在GET和POST之间看到不同的JSON数据

时间:2015-03-15 20:22:44

标签: jquery ajax json node.js express

我正在编写一个Node / Express服务器,当我注意到GET和POST之间的字符串化JSON数据有些奇怪时,我正在切换我的一些HTTP动词。

我通过jQuery使用$ .ajax,这是我在POST和GET之间切换时服务器看到的内容:

// Server call to console.log(req.body) using POST--
{ productIdList: [ '5505e4ecd24efe9f074ecda1' ] }

// Server call to console.log(req.query) using GET--
{ '{"productIdList":': { '"5505e4ecd24efe9f074ecda1"': '' } }

GET案例甚至没有正确表示数据类型。我错过了什么秘密?

谢谢, PT

编辑#1

客户端JS浏览器代码,发送GET或POST。

    data = { productIdList: [ '5505e4ecd24efe9f074ecda1' ];
    :
    :
    // POST mode
    $.ajax('/endpoint', {
        method: 'post',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(data)
    })

    -- or -- 

    // GET mode
    $.ajax('/endpoint', {
        method: 'get',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(data)
    })

节点/快速服务器代码

router.route('/endpoint')
.get(function(req, res) {
    console.log(req.query);
})
.post(function(req, res) {
    console.log(req.body);
});

1 个答案:

答案 0 :(得分:0)

好吧我认为,你正在寻找一个无问题的问题:

你在这里看到:

router.route('/endpoint')
.get(function(req, res) {  // <-- res should send the json back
    console.log(req.query);
})
.post(function(req, res) { // <-- req should send the json in
    console.log(req.body);
});

要发送给您,必须使用buffer的{​​{1}},因此您在json对象上使用string是正确的。稍后使用JSON.stringify()来恢复对象。

注意: HTTP请求(GET)消息允许包含消息体,因此必须解析消息。但是,GET的服务器语义受到限制,使得正文(如果有的话)对请求没有语义含义。解析的要求与方法语义的要求是分开的。

这基本上意味着不应该通过Ajax.Get请求作为正文发送JSON.parse()对象。

JSON使contentType: 'application/json; charset=utf-8'GET请求处理数据的方式与您解析POST和POST GET的原因不同。

对于stringified,您告诉您要发送的内容..

对于POSTGET标题很有帮助,但不是必需的。您可能希望使用Content-type标头,这是一个以分号分隔的表示方案列表(内容类型元信息值),将在此请求的响应中接受。

例如。 accept