node.js请求POST数组“第一个参数必须是string或缓冲区”

我想从一个node.js进程(客户端)发送到另一个(服务器)的数组。

我的代码在“客户端”node.js:

var express = require('express'); var app = express(); var config = require('./config'); var bodyParser = require('body-parser'); var methodOverride = require('method-override'); var request = require('request'); app.set('port', process.env.PORT || 3009); app.use(bodyParser.json()); // parse application/json app.use(bodyParser.json({ type: 'application/vnd.api+json' })); // parse application/vnd.api+json as json app.use(bodyParser.urlencoded({ extended: true })); // parse application/x-www-form-urlencoded app.use(methodOverride('X-HTTP-Method-Override')); // override with the X-HTTP-Method-Override header in the request. simulate DELETE/PUT var arr = [{ date : "2016/1/26", count: 6 }, { date : "2016/1/27", count: 0 }, { date : "2016/1/28", count: 0 }, { date : "2016/1/29", count: 0 }, { date : "2016/1/30", count: 0 }, { date : "2016/1/31", count: 2 }, { date : "2016/2/1", count: 0 }, { date : "2016/2/2", count: 4 }]; request.post({ uri: config.URL, headers: { 'Content-Type':'application/json;charset=UTF-8', 'Accept-Encoding':'gzip, deflate', 'X-Requested-With': 'XMLHttpRequest', 'Accept':'application/json, text/plain, */*', 'User-Agent': 'UserAgent' }, body: arr }, function(err, res, body){ //whatever }); 

在服务器端,我只收到信息和console.log它。

在启动代码时,我得到了Client: TypeError('first argument must be a string, Array, or Buffer');

为什么我不能发送数组? 我会发誓我已经做了1000次…


如果我像这样在客户端中对数组进行string化: body: JSON.stringify(arr)并且在服务器中,我尝试将其parsing为数组,如下所示: var data = JSON.parse(req.body); parsing数据时,在服务器中出现以下错误:

 SyntaxError: Unexpected token o at Object.parse (native) at exports.uploadReads (C:\node\stockare2\server\companys\companys.controller.js:628:21) at Layer.handle [as handle_request] (C:\node\stockare2\node_modules\express\lib\router\layer.js:95:5) at next (C:\node\stockare2\node_modules\express\lib\router\route.js:131:13) at uploadUser (C:\node\stockare2\server\companys\companys.routes.js:117:7) at Layer.handle [as handle_request] (C:\node\stockare2\node_modules\express\lib\router\layer.js:95:5) at next (C:\node\stockare2\node_modules\express\lib\router\route.js:131:13) at Route.dispatch (C:\node\stockare2\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (C:\node\stockare2\node_modules\express\lib\router\layer.js:95:5) at C:\node\stockare2\node_modules\express\lib\router\index.js:277:22 at Function.process_params (C:\node\stockare2\node_modules\express\lib\router\index.js:330:12) at next (C:\node\stockare2\node_modules\express\lib\router\index.js:271:10) at serveStatic (C:\node\stockare2\node_modules\express\node_modules\serve-static\index.js:74:16) at Layer.handle [as handle_request] (C:\node\stockare2\node_modules\express\lib\router\layer.js:95:5) at trim_prefix (C:\node\stockare2\node_modules\express\lib\router\index.js:312:13) at C:\node\stockare2\node_modules\express\lib\router\index.js:280:7 

如果我试图parsing数据之前我console.log req.body,我可以看到数据是在一个奇怪的格式:

 { '{"date":"2016/1/26...... 

尝试添加选项json: true到请求:

 request.post({ uri: config.URL, headers: { 'Content-Type':'application/json;charset=UTF-8', 'Accept-Encoding':'gzip, deflate', 'X-Requested-With': 'XMLHttpRequest', 'Accept':'application/json, text/plain, */*', 'User-Agent': 'UserAgent' }, json: true, body: arr }, function(err, res, body){ 

使用var data = eval(req.body)转换成javascript对象。