节点核心捕获中间件回调错误



我有以下代码来检查源标头并允许访问,使用 express 和 npm cors 插件

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));

现在我想知道是否有办法捕获"新错误"回调?

并发回 400 http 状态?

谢谢!

是的,这在错误处理下的快速文档中进行了解释。

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 处理覆盖。

最新更新