Express Middleware - цикл вызова - PullRequest
0 голосов
/ 18 июня 2020
module.exports = errorHandler;

function errorHandler(err, req, res, next) {
    if (typeof (err) === 'string') {
        // custom application error
        return res.status(400).json({ error: err });
    }

    if(err.name === 'Unauthorized') {
        return res.status(401).json({ error: err.message })
    }

    // default to 500 server error
    return res.status(500).json({ error: err.message });
}
// register routes
app.use('', require('./controllers/view.controller'))
app.use('/api/auth', require('./controllers/auth.controller'))
app.use('/api/games', require('./controllers/game.controller'))
app.use('/api/bets', require('./controllers/bet.controller'))
app.use('/api/coupons', require('./controllers/coupon.controller'))
app.use('/api/users', require('./controllers/user.controller'))

// global error handler
app.use(errorHandler);

Считается ли этот обработчик ошибок express промежуточным программным обеспечением или маршрутом express? Вызывается ли промежуточное ПО express до или после цикла запроса? Или это зависит от того, когда в цикле он вызывается? Например, этот errorHandler регистрируется после маршрутов, поэтому он вызывается после цикла запроса?

1 Ответ

1 голос
/ 18 июня 2020

Такой errorHandler - это специальный тип Express промежуточного программного обеспечения, который вызывается только при возникновении ошибки (обычно промежуточным программным обеспечением, вызывающим next(err) с ненулевым параметром). Вы можете сказать, что это промежуточное ПО с ошибкой, по количеству объявленных аргументов: 4 вместо обычных 2 или 3.

Так что не имеет значения, куда вы его добавляете, до или после обычных обработчиков маршрута (хотя обычно они определено последним). Но по отношению друг к другу в каждом цикле запроса промежуточные программы обработки ошибок следуют порядку добавления; первый добавленный всегда вызывается первым Express в цепочке обработки ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...