是什么:
body-parser
是一個HTTP請求體解析中間件呈枉,使用這個模塊可以解析JSON哲泊、Raw柄错、文本舷夺、URL-encoded格式的請求體苦酱,Express
框架中就是使用這個模塊做為請求體解析中間件。請求體解析后给猾,解析值都會被放到req.body屬性疫萤,內(nèi)容為空時是一個{}空對象。
為什么要用它:
//截取了項目代碼中用superagent發(fā)送請求的片段
request.post('/signUp')
.send({name: action.name, password: action.password})
現(xiàn)在在接收端我想要取到發(fā)送請求時的參數(shù),即name和password,該怎么取,我先輸出一下req,看看都有什么
這只是冰山一角,輸出的req非常復(fù)雜,完全找不到我發(fā)送的參數(shù)在哪里,這個時候就需要對req進(jìn)行解析了,當(dāng)然可能有多種方式,在這里我們就說一下Express中常用的body-parser
如何用:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
上面的代碼我們引進(jìn)了bodyparser
,敢伸。最后兩行模塊會處理application/x-www-form-urlencoded
扯饶、application/json
兩種內(nèi)容格式的請求體。現(xiàn)在我又輸出了一下req,內(nèi)容還是非常多,不過我發(fā)現(xiàn)它將我需要的參數(shù)都放到了一個名為body的對象中
圖中的name和password就是我在發(fā)送請求時發(fā)送的參數(shù),這樣一來我就可以用
req.body.name
和req.body.password
取到我想要的數(shù)據(jù)了.
上邊的兩行代碼到底是什么意思,又做了什么呢,
1. bodyParser.json(options)
解析json格式
返回一個僅解析json格式數(shù)據(jù)的中間件池颈。這個方法支持任意Unicode編碼的請求體尾序,且支持gzip和deflate編碼的數(shù)據(jù)壓縮.
2.bodyParser.urlencoded(options)
解析文本格式
返回一個處理urlencoded數(shù)據(jù)的中間件。這個方法默認(rèn)使用UTF-8編碼躯砰,且支持gzip和deflate編碼的數(shù)據(jù)壓縮蹲诀。解析后,其后的所有的req.body中將會是一個鍵值對對象弃揽。
除了我們上邊說得兩種格式的解析,還有其他的
bodyParser.raw(options):解析二進(jìn)制:
返回一個將所有數(shù)據(jù)做為Buffer
格式處理的中間件。這個方法支持gzip和deflate編碼的數(shù)據(jù)壓縮则北。解析后矿微,其后的所有的req.body中將會是一個Buffer
數(shù)據(jù)。
bodyParser.text(options):解析文本格式
返回一個僅處理字符串格式處理的中間件尚揣。這個方法支持gzip和deflate編碼的數(shù)據(jù)壓縮涌矢。解析后,其后的所有的req.body中將會是一個字符串值