簡體   English   中英

Express JS中的正文解析器

[英]Body-parser in Express JS

我已經和Express JS糾纏了一段時間了,遇到了一個叫做body parser的東西。 根據我的研究機構的分析,解析器允許我們從HTTP請求中發布內容。

我的問題是,在使用express.js時是否絕對需要使用正文解析器?

如果沒有必要,那么使用它的好處是什么,如果不使用正文解析器,那么需要做什么以確保內容已發布?

先感謝您。

讓我們嘗試保持最低限度的技術性。

假設您正在將HTML表單數據發送到node-js服務器,即您向服務器發出了請求。 服務器文件將在請求對象下接收您的請求。 現在按邏輯,如果您在服務器文件中控制台記錄此請求對象,則應該在其中的某些位置看到表單數據,然后可以將其提取出來,但是哇! 你實際上不!

那么,我們的數據在哪里? 如果它不僅出現在我的請求中,我們將如何提取它。

對此的簡單解釋是http將您的表單數據逐位發送,以便在到達目的地時進行組裝。 那么您將如何提取數據。 使用一種叫做“ body-parser”的東西,它可以為您做到這一點。

body-parser解析您的請求並將其轉換為一種格式,您可以從中輕松提取您可能需要的相關信息。 首先,在您的app.js文件中需要以下內容。

var bodyParser = require('body-parser')

並添加以下行使其起作用

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

您可以利用on('data')on('end')來提取有效負載。 無論何時發送POST請求,數據都會以比特流的形式到達。 當流進入時,將觸發on('data')事件,您可以開始將流收集到緩沖區中。 當流結束(已接收到所有數據)時,將觸發on('end')事件,即可以開始使用剛剛收集的數據時。

Yopu需要包括stringDecoder(stringDecoder是節點內置的模塊)

const string_decoder= require('string_decoder').StringDecoder;

您需要使這段代碼作為中間件運行。

var buffer= "";
request.on('data',  function(data_stream)
{
    //start collecting the data stream into a buffer
    buffer= buffer + utf8_decoder.write(data_stream);
});

request.on('end', function()
{
    buffer= buffer + utf8_decoder.end();
    //add the buffer to the request object so it can be accessed elsewhere
    request.payload= buffer;
});

如果您決定不使用任何外部庫,這可能是最好的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM