Да, это объясняется в документах Express в разделе Обработка ошибок .
Express поставляется со встроенным обработчиком ошибок, который заботится о любых ошибках, которые могут возникнуть в приложении. Эта промежуточная функция обработки ошибок по умолчанию добавляется в конец стека функций промежуточного программного обеспечения.
Если вы передаете ошибку в next()
и не обрабатываете ее в пользовательском обработчике ошибок, она будет обрабатываться встроенным обработчиком ошибок; ошибка будет записана клиенту с трассировкой стека. Трассировка стека не включена в производственную среду.
В документах не указывается гораздо больше подробностей об обработчике по умолчанию, но после просмотра исходного кода обработчик по умолчанию представляет собой отдельный модуль с именем finalhandler
.
В любом случае, чтобы переопределить этот обработчик, обратитесь к разделу в документах Express под названием Запись обработчиков ошибок .
Это объясняет:
Определение функций промежуточного программного обеспечения для обработки ошибок аналогично другим функциям промежуточного программного обеспечения, за исключением того, что функции для обработки ошибок имеют четыре аргумента вместо трех: (err, req, res, next)
. Например:
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
})
Вы определяете промежуточное ПО для обработки ошибок последним, после других app.use()
и маршрутизируете вызовы
Так что в вашем случае, если вы хотите ответить 400, вы можете написать что-то вроде этого:
const app = express();
const cors = require('cors')
var corsOptions = {
origin: function (origin: any, callback: any) {
if (!origin || whitelist.indexOf(origin) !== -1) {
callback(null, true)
} else {
callback(new Error('Not allowed by CORS'))
}
}
}
app.use(cors(corsOptions));
// This overrides the default error handler, and must be called _last_ on the app
app.use(function customErrorHandler(err, req, res, next) {
res.status(400).send('Your custom error message here');
});
Express также включает в свой репозиторий пример сервера , показывая это переопределение обработки erorr.