来自body-parser Node JS的不受欢迎的格式

时间:2015-06-30 15:23:00

标签: node.js post express body-parser

我有一个Android应用程序,使用以下内容向我发送加速计数据,其中body是类似{"device_name":"device1","time":123123123,"acceleration":1}的字符串:

con = (HttpURLConnection) new URL(SERVER).openConnection();
con.setRequestMethod("POST");
con.setDoOutput(true);

writer = new OutputStreamWriter(con.getOutputStream());
writer.write(body);
writer.flush();

在服务器端,我正在使用身体解析器,如:

var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended:false}));
...
app.post('/' function(req,res {
console.log(req.headers);
console.log(req.body);

当我收到一个帖子请求时,就会显示出来:

{ '{"device_name":"device1","time":123,"jerk":21.135843,"acceleration":1}': '' }

我想以{"device_name":"device1","time":123123123,"acceleration":1}的形式获取req.body是否有一个我缺少的参数来设置它?

谢谢!

更新

客户端代码无法更改给我,因此更改正在发送的内容类型会更加困难。这是req.head日志...

{ 'user-agent': '...(Linux; U; Android 4.1.2;...)',
  host: '...',
  connection: 'Keep-Alive',
  'accept-encoding': 'gzip',
  'content-type': 'application/x-www-form-urlencoded', 
  'content-length': '...' }

1 个答案:

答案 0 :(得分:1)

您正在上传JSON字符串,但您没有指示body-parser处理这些字符串。

而不是:

app.use(bodyParser.urlencoded({extended:false}));

使用此:

app.use(bodyParser.json());

还要确保您的请求将Content-Type标头设置为application/json。如果那是不可能的,并且您确定上传的内容总是将成为JSON,您可以强制正文解析器将主体解析为JSON,如下所示:

app.use(require('body-parser').json({ type : '*/*' }));