https://github.com/expressjs/body-parser/blob/master/index.js#L108
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)
})
}
}
Анализатор тела - это промежуточное ПО, которому необходим доступ к res, req и next.
Он анализирует ваш запрос, используя req и in Чтобы передать управление следующему промежуточному программному обеспечению, ему необходим доступ к следующей функции.
Здесь app.use(bodyParser.json());
по умолчанию (req, res, next) передаются как
bodyParser.json()
, возвращает return function bodyParser (req, res, next) { .. }
так что становится -> app.use(function bodyParser (req, res, next) { .. });
, но в вашем случае вы сами создаете промежуточное ПО и несете ответственность за передачу параметров в bodyParser
, поэтому может иметь доступ к необходимым аргументам.
app.use((req, res, next) => {
if (req.originalUrl === '/hooks') {
next();
} else {
bodyParser.json()(req, res, next);
}
});
Посмотрите, как работает app.use
ниже
https://github.com/expressjs/express/blob/master/lib/application.js#L187 -L242