簡體   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