Node.js 来自主体解析器节点JS的不需要的格式
我有一个android应用程序使用以下命令向我发送加速计数据,其中body是一个类似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(
{“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
会在解析正文内容之前尝试匹配该类型。看见