[英]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.