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); } });