整个下午我都经历过这个,请帮我调试。
客户端:
fetch('/admin/edit/tags', {
method: 'post',
credentials: 'same-origin',
headers: {
'content-type': 'application/json',
'accept': 'application/json'
},
body: form.getFormData('json')
})...
console.log(form.getFormData('json'));
返回{"id":"11","tag":"tag12","submit":"Update"}
服务器端(Node.js):
请求处理代码:
function (req, res) {
var bufferBody = [];
req.on('error', err => {
return res.status(400).send('request error.');
}).on('data', chunk => {
bufferBody.push(chunk);
}).on('end', () => {
res.on('error', err => {
return res.status(400).send('response error.');
});
req.bufferBody = bufferBody;
req.stringBody = Buffer.concat(bufferBody).toString();
//req.json = JSON.parse(req.stringBody);
req.body = qs.parse(req.stringBody);
})
}
路线:
{
method: 'POST',
path: '/admin/edit/tags',
handle: PC(function*(req, res) {
var data = req.body;
console.log(data);
console.log(req.stringBody);
})
}
这是缓冲区字符串:theBuffer.toString()
%7B%22id%22%3A%2211%22%2C%22tag%22%3A%22tag12%22%2C%22submit%22%3A%22Update%22%7D=
这是查询字符串:qs.parse(theBufferString)
{ '{"id":"11","tag":"tag12","submit":"Update"}': '' }
我已检查过每个地方,标题是否正确。可能导致jsonString变为queryString的原因是什么?
我知道我可以将jsObject转换为queryString,但我真的很想使用jsonString。
答案 0 :(得分:0)
我弄明白了这个问题。它在服务器端。
我编写了自己的请求客户端,在客户端中,我将req.body
转为query string
。因为在我刚刚关注示例之前:https://nodejs.org/api/http.html(滚动到结尾)在Node.js文档中。所以我添加了req.headers['content-type']
检查,如果josn
,请使用JSON.stringify
,否则qs.stringify
。
if (options.body) {//solve socket hangup problem
if (isJSON()) {
// TODO add more content-type, not just json
//e.g for forms: application/x-www-form-urlencoded
options.body = JSON.stringify(options.body);
} else {
options.body = qs.stringify(options.body);
}
options.headers['content-length'] = Buffer.byteLength(options.body);
}