如何为 express 上的 404 错误添加中间件
How add middleware for 404 errors on express
设置
app.use("/api/tobaccos", tobaccos);
app.use(function(err, req, res, next) {
console.error(err.message);
});
api:
router.get("/:id", async (req, res) => {
console.log("GET TOBACCO:" + req.params.id);
await Tobacco.findById(req.params.id)
.then(tobacco => res.status(200).json({ status: "success", data: tobacco }))
.catch(error => res.status(404).json({
status: "fail",
msg: "Tobacco not found!",
code: "error.tobaccoNotFound"
}));
});
我正在尝试为所有 404 错误添加中间件
app.use(function(err, req, res, next) {
console.error(err.message);
});
或者这不起作用
app.get('*', function(req, res){
res.status(404).send('what???');
});
怎么了?
您可以将此 middleware
添加到您的 root
文件中。它为任何无效路由发送错误。
//Handles 404 errors
app.use((req, res, next) => {
const error = new Error('Error Occured');
error.status = 404;
next(error);
});
app.use((error, req, res, next) => {
res.status(error.status || 500);
res.json({
error: {
message: error.message
}
});
});
或者,您可以尝试捕获所有 404 错误
app.use(function(req, res, next) {
res.status(404).send( 'Error Occured! ');
});
在 Express 中,404 响应不是错误的结果,因此错误处理程序中间件不会捕获它们。此行为是因为 404 响应仅表示没有其他工作要做;也就是说,Express已经执行了所有的中间件函数和路由,发现有none个响应了。您需要做的就是在堆栈的最底部(在所有其他函数下方)添加一个中间件函数来处理 404 响应:
app.use(function (req, res, next) {
res.status(404).send("Sorry can't find that!")
})
运行时在 express.Router() 实例上动态添加路由,这样路由就不会被中间件函数取代。
设置
app.use("/api/tobaccos", tobaccos);
app.use(function(err, req, res, next) {
console.error(err.message);
});
api:
router.get("/:id", async (req, res) => {
console.log("GET TOBACCO:" + req.params.id);
await Tobacco.findById(req.params.id)
.then(tobacco => res.status(200).json({ status: "success", data: tobacco }))
.catch(error => res.status(404).json({
status: "fail",
msg: "Tobacco not found!",
code: "error.tobaccoNotFound"
}));
});
我正在尝试为所有 404 错误添加中间件
app.use(function(err, req, res, next) {
console.error(err.message);
});
或者这不起作用
app.get('*', function(req, res){
res.status(404).send('what???');
});
怎么了?
您可以将此 middleware
添加到您的 root
文件中。它为任何无效路由发送错误。
//Handles 404 errors
app.use((req, res, next) => {
const error = new Error('Error Occured');
error.status = 404;
next(error);
});
app.use((error, req, res, next) => {
res.status(error.status || 500);
res.json({
error: {
message: error.message
}
});
});
或者,您可以尝试捕获所有 404 错误
app.use(function(req, res, next) {
res.status(404).send( 'Error Occured! ');
});
在 Express 中,404 响应不是错误的结果,因此错误处理程序中间件不会捕获它们。此行为是因为 404 响应仅表示没有其他工作要做;也就是说,Express已经执行了所有的中间件函数和路由,发现有none个响应了。您需要做的就是在堆栈的最底部(在所有其他函数下方)添加一个中间件函数来处理 404 响应:
app.use(function (req, res, next) {
res.status(404).send("Sorry can't find that!")
})
运行时在 express.Router() 实例上动态添加路由,这样路由就不会被中间件函数取代。