JSONstring在发布请求期间被修改
我试图从一个本地nodejs(express)实例发送以下JavaScript对象到另一个。
var v = { items: [{ id: "fil1", values: [ { key: "123", timestamp: 333, value: "aaa" }, { key: "123", timestamp: 333, value: "aaa" }, { key: "123", timestamp: 333, value: "aaa" }, { key: "123", timestamp: 333, value: "aaa" } ] }] };
我在request = require('request')
地方使用了下面的post请求, params
是上面的对象v
的JSON.stringified版本。
var performPostRequest = function (ip, port, endpoint, params, callback) { var url = "http://" + ip + ":" + port + "/" + endpoint; request.post({ url: url, form: params, headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' } }, function (err, response, body) { if (err) { callback(err, body); } if (body) { callback(err, JSON.parse(body)); } }); };
接收端点如下所示:
router.post('/values', function (req, res) { console.log(req.body); res.status(201).send(""); });
路由器是express.Router()。
所以,对于我的问题: 当在发送者处打印JSON.stringify(v)
时,结果是一个与对象v相匹配的string,但是当在接收端点打印请求主体时,string会被搞乱(见下文) 。 我究竟做错了什么?
JSON.stringify(v)
:
{"items":[{"id":"fil1","values":[{"key":"123","timestamp":333,"value":"aaa"},{"key":"123","timestamp":333,"value":"aaa"},{"key":"123","timestamp":333,"value":"aaa"},{"key":"123","timestamp":333,"value":"aaa"}]}]}
接收方req.body
:
{ '{"items":': { '{"key":"123","timestamp":333,"value":"aaa"},{"key":"123","timestamp":333,"value":"aaa"},{"key":"123","timestamp":333,"value":"aaa"},{"key":"123","timestamp":333,"value":"aaa"}': '' } }
您可以使用json
选项使用request
来发送JSON,该request
处理请求doc中的所有内容:
json – 将body设置为值的JSON表示,并添加Content-type:application / json头。 另外,将响应主体parsing为JSON。
var request = require('request'); var options = { url: url, method: 'POST', json: { items: [{ id: "fil1", values: [ { key: "123", timestamp: 333, value: "aaa" }, { key: "123", timestamp: 333, value: "aaa" }, { key: "123", timestamp: 333, value: "aaa" }, { key: "123", timestamp: 333, value: "aaa" } ] }] }; }; request(options, function(error, response, body) { if (error) { callback(err, body); } if (body) { callback(error, body); } });