繁体   English   中英

node.js正文解析器对Content-Type:x-www-form-urlencoded和Form-data JSON的错误解释

[英]node.js body-parser bad interpretation of Content-Type:x-www-form-urlencoded and Form-data JSON

我有一个客户要求

Content-type: Content-Type:application/x-www-form-urlencoded; charset=UTF-8

像这样的Form-Data(json):

{"jsonrpc":"2.0","method":"print","params":{"id":"lp0","doc":"<section>
<p>&nbsp;sitedemo&nbsp;&nbsp;&nbsp;&nbsp;</p><br><barcode>                   CLODGCGMM                    
</barcode><br><br><hr><drawer></drawer><br></section>"},"id":1501151330950}

node.js服务器使用主体解析器中间件,如下所示:

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

console.log(request.body)给我这样的东西:

{ '{"jsonrpc":"2.0","method":"print","params":{"id":"lp0","doc":"<section>
<p>': '',
'nbsp;': '',
'nbsp;sitedemo': '',
'nbsp;':'',
'&nbsp;</p><br><barcode>':''
'.......}'}

构建一个json对象,其中包含由行和值null组成的键。

我如何检索客户端发送的确切对象(我无法访问客户端)

谢谢。

当客户端在标头中声明请求正文已进行URL编码但正在发送JSON时,客户端就损坏了。

如果确实是这种情况,则需要防止body-parser解码这些请求,并手动进行解码。

代替这个:

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

尝试这个:

app.use(
  bodyParser.raw({ type : 'application/x-www-form-urlencoded' }),
  function(req, res, next) {
    try {
      req.body = JSON.parse(req.body)
    } catch(e) {
      req.body = require('qs').parse(req.body.toString());
    }
    next();
  }
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM