Express中介軟體body parser

2022-05-07 05:18:10 字數 1950 閱讀 8335

在http請求種,post、put、patch三種請求方法中包含著請求體,也就是所謂的request,在nodejs原生的http模組中,請求體是要基於流的方式來接受和解析。

body-parser是乙個http請求體解析的中介軟體,使用這個模組可以解析json、raw、文字、url-encoded格式的請求體,

node原生的http模組中,是將使用者請求資料封裝到了用於請求的物件req中,這個物件是乙個incomingmessage,該物件同時也是乙個可讀流物件。在原生http伺服器,或不依賴第三方解析模組時,可以用下面的方法請求並且解析請求體

//開始解析

req.on('end', function()

else

//rwa格式請求體解析

}else

if(req.headers['content-type'].indexof('text/plain')!==-1)else

//url-encoded格式請求體解析

}else})}

else

}).listen(3000)

/*

引入依賴項

*/var express = require('express');

//……

var bodyparser = require('body-parser');

var routes = require('./routes/index');

var users = require('./routes/users');

//……

////

經過這個中介軟體後,就可以在所有路由處理器的req.body中訪問請求引數

在實際專案中,不同路徑可能要求使用者使用不同的內容型別,body-parser還支援為單個express路由新增請求體解析,比如

var express = require('express');

var bodyparser = require('body-parser');

express();

//var jsonparser =bodyparser.json();

//var urlencodedparser = bodyparser.urlencoded();

//post /login 中獲取url編碼的請求體

if(!req.body) return res.sendstatus(400);

res.send('welcome, ' +req.body.username);

})//

post /api/users 獲取json編碼的請求體

if(!req.body) return res.sendstatus(400);

//create user in req.body

})

《指定請求型別》

body-parser還支援為某一種或者某一類內容型別的請求體指定解析方式,指定時可以通過在解析方法中新增type引數修改指定content-type的解析方式。

比如,對text/plain內容型別使用json解析

這一選項更多是用在非標準請求頭中的解析

//

解析自定義的 json

//解析自定義的 buffer

//將 html 請求體做為字串處理

<>

當請求體解析之後,解析值會被放到req.body屬性中,當內容為空時候,為乙個空物件{}

---bodyparser.json()--解析json格式

---bodyparser.raw()--解析二進位制格式

---bodyparser.text()--解析文字格式

---bodyparser.urlencoded()--解析文字格式

express中介軟體

中介軟體的本質就是乙個請求處理方法 函式 該方法接收三個引數 request請求物件 response響應物件 next下乙個中介軟體 把使用者從請求到響應的整個過程分發到多個中介軟體去處理。同乙個請求所經過的中介軟體的請求物件和響應物件都是同乙個請求物件和相應物件 不關心請求路徑和請求方法的中介軟...

Express中介軟體

express是乙個路由和中介軟體web框架,其自身的功能很少 express應用程式本質上是一系列中介軟體函式呼叫。中介軟體功能是可以訪問請求物件 req 響應物件 res 和應用程式的請求 響應週期中的下乙個中介軟體功能的功能。下乙個中介軟體功能通常由名為的變數表示next。中介軟體功能可以執行...

express中介軟體

中介軟體的知識點 同乙個請求物件所經過的中介軟體都是同乙個請求物件和響應物件 如果沒有可以匹配的中介軟體,將會輸出 cannot get 路徑 console.log 111 res.end hello next console.log 222 res.end world next 控制台會輸出11...