我正在编写一个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);
});
答案 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
,您告诉您要发送的内容..
对于POST
,GET
标题很有帮助,但不是必需的。您可能希望使用Content-type
标头,这是一个以分号分隔的表示方案列表(内容类型元信息值),将在此请求的响应中接受。
例如。 accept