Express 框架的body-parser的用法

body-parser的方法的用法有些疑问,看了body-parser在Github上的说明,以及其他一些博客,感觉都说的不清楚。我通过使用demo测试,知道.urlencoded方法可以把request body中的字符串解析成object,例如:前台请求中的请求参数是:"aa=aa"这样的字符串,node后台使用bodyParser.urlencoded中间件方法之后req.body={aa:aa}

那么bodyParser.json()是把什么格式的请求参数转化成什么呢?还有bodyParser.text()以及bodyParser.raw()呢?

阅读 2.9k
1 个回答

等等,我翻车了

它是先按照你在 use 时候给定的 options 进行格式化约束的,然后先按照 json 来转一次,没出错了再接着调用 urlencoded 进行表单其他内容进行接收和格式化。

其中json转的时候默认按照 var type = opts.type || 'application/json' 这个 content-type 来进行格式指定检查请求头是不是json,如果不是则默认一个空,不然进行 json 的格式化,然后就是后面的 urlencoded 逻辑了

源码如下
https://github.com/expressjs/...

function bodyParser (options) {
  var opts = {}

  // exclude type option
  if (options) {
    for (var prop in options) {
      if (prop !== 'type') {
        opts[prop] = options[prop]
      }
    }
  }

  var _urlencoded = exports.urlencoded(opts)
  var _json = exports.json(opts)

  return function bodyParser (req, res, next) {
    _json(req, res, function (err) {
      if (err) return next(err)
      _urlencoded(req, res, next)
    })
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题