分类目录归档:node.js

`express` 框架中的参数小记

注意req.params只有在参数化的路径中的参数。查询字符串中的参数要用req.query.比如:
// 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=2Content-Type: application/x-www-form-urlencodedaaa=1&bbb=2
这样的请求,应该是要用req.query.fooreq.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的插件:为了解析req.body一般可以安装body-parser这个插件:
// 假设 `app` 是 `express` 的实例:const bodyParser = require('body-parser')// 在所有路由前插入这个中间件:app.use(bodyParser.urlencoded())
这样就可以了。bodyParser.urlencoded()是HTML中默认的查询字符串形式的编码,即application/x-www-form-urlencoded. 如果需要解析其他格式的,则需要分别加入其他格式的中间件,比如:
  • bodyParser.json()支持JSON格式(application/json
  • bodyParser.raw()将会把req.body置为一个Buffer(Content-Type:application/octet-stream)
  • bodyParser.text()将会把req.body置为一个string(Content-Type:text/plain)
然而上传文件用的multipart/form-data格式却没有被bodyParser所支持,需要使用busboy之类的其他中间件。阅读全文