首發地址:https://clarencep.com/2017/04...
轉載請註明出處express
注意:req.params
只有在參數化的路徑中的參數。查詢字符串中的參數要用 req.query
.json
好比:app
// server.js: app.post('/user/:id', function(req, res){ console.log('req.params: ', req.params) console.log('req.query: ', req.query) console.log('req.body: ', req.body) })
// HTTP request: POST /user/123?foo=1&bar=2 Content-Type: application/x-www-form-urlencoded aaa=1&bbb=2
這樣的請求,應該是要用 req.query.foo
和 req.query.bar
來獲取 foo 和 bar 的值,最終打印出以下:框架
req.params: { id: '123' } req.query: { foo: '1', bar: '2' } req.body: { aaa: '1', bbb: '2' }
req.body
此外,express
框架自己是沒有解析 req.body
的 -- 若是打印出來 req.body: undefined
則說明沒有安裝解析 req.body
的插件:post
爲了解析 req.body
通常能夠安裝 body-parser
這個插件:ui
// 假設 `app` 是 `express` 的實例: const bodyParser = require('body-parser') // 在全部路由前插入這個中間件: app.use(bodyParser.urlencoded())
這樣就能夠了。編碼
bodyParser.urlencoded()
是HTML中默認的查詢字符串形式的編碼,即application/x-www-form-urlencoded
. 若是須要解析其餘格式的,則須要分別加入其餘格式的中間件,好比:url
bodyParser.json()
支持JSON格式(application/json
)插件
bodyParser.raw()
將會把 req.body
置爲一個 Buffer
(Content-Type:application/octet-stream
)code
bodyParser.text()
將會把 req.body
置爲一個 string
(Content-Type: text/plain
)
然而上傳文件用的 multipart/form-data
格式卻沒有被 bodyParser
所支持,須要使用 busboy
之類的其餘中間件。