Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 来自主体解析器节点JS的不需要的格式_Node.js_Post_Express_Body Parser - Fatal编程技术网

Node.js 来自主体解析器节点JS的不需要的格式

Node.js 来自主体解析器节点JS的不需要的格式,node.js,post,express,body-parser,Node.js,Post,Express,Body Parser,我有一个android应用程序使用以下命令向我发送加速计数据,其中body是一个类似{“device_name”的字符串:“device1”,“time”:123123,“acceleration”:1}: con = (HttpURLConnection) new URL(SERVER).openConnection(); con.setRequestMethod("POST"); con.setDoOutput(true); writer = new OutputStreamWriter(

我有一个android应用程序使用以下命令向我发送加速计数据,其中body是一个类似
{“device_name”的字符串:“device1”,“time”:123123,“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);
当我收到post请求时,会显示以下内容:

{ '{"device_name":"device1","time":123,"jerk":21.135843,"acceleration":1}': '' }
我想以
{“device_name”:“device1”,“time”:123123,“acceleration”:1}
的形式获取req.body,是否缺少设置此参数的参数

谢谢

更新:

客户机代码对我来说是不可访问的,所以更改发送的内容类型会困难得多。这是请求头日志

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

您正在上载一个JSON字符串,但没有指示
body parser
处理这些字符串

与此相反:

app.use(bodyParser.urlencoded({extended:false}));
使用以下命令:

app.use(bodyParser.json());
还要确保您的请求将
内容类型
标题设置为
application/json
。如果这是不可能的,并且您确定上传的内容总是JSON,那么您可以强制主体解析器将主体解析为JSON,如下所示:

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

看起来像JSON,您需要使用
bodyParser.JSON()
中间件。对不起,我不是最有经验的:在Java代码中,编写器正在编写body,它是一个字符串。在客户端代码(android应用程序)中,writer正在发送一条字符串。我想,如果你不能让客户端代码发送带有适当标题的请求,你只需要创建自己的中间件。如果json bodyparser没有正确的内容类型,它不会将json捕获为json。当我尝试此操作时,
console.log(req.body)
prints
{}
谢谢,您能解释一下
{type:'*/*}中的通配符是什么吗
does?@lpbug它会覆盖默认的
application/json
内容类型,而
bodyParser.json
会在解析正文内容之前尝试匹配该类型。看见