Javascript 重写express常规错误处理
我试图用json对象覆盖express常规错误处理,但它不起作用 我测试它的方法是通过进行http get调用,该调用的路由不存在 我添加了错误处理中间件,但当我发出错误请求时,返回的仍然是错误请求Javascript 重写express常规错误处理,javascript,node.js,express,Javascript,Node.js,Express,我试图用json对象覆盖express常规错误处理,但它不起作用 我测试它的方法是通过进行http get调用,该调用的路由不存在 我添加了错误处理中间件,但当我发出错误请求时,返回的仍然是错误请求 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Error</title> </head&
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /api/image/initialize</pre>
</body>
</html>
我花了很长时间才弄明白这一点,所以这里有一些人可能会在这个问题上举步维艰。如果找不到路径,则必须添加一个“全部捕获”路由,并将其转发到错误处理程序
您试图用它来做什么,而仅仅定义自己的中间件将无法处理?另外,请注意,这不会处理POST、PUT、PATCH等。。。请求。通常只需使用
app.use(function(req,res,next)=>{code here})
即可捕获Express FAQ中描述的所有类型的请求。
async function main() {
// the startup initialization code, handle any initialization
// code in the startup folder, and call thh function in index.js
const {
settings,
projectCol
} = await initialize();
port = normalizePort(process.env.PORT || DEFAULT_PORT);
var app = express();
// view engine setup
app.use(logger('dev'));
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.use(cookieParser());
// allow so it be used on the same PC
app.use( function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
// setup routes
setupRoutes(app, { projectCol, settings });
app.set('port', port);
// error handling
app.use( function (err, req, res, next) {
if (res.headersSent) {
return next(err)
}
return res.status(500).json({
error: err.message
});
})
app.listen(port);
app.on('error', onError);
app.on('listening', onListening);
}
app.get('*', function(req, res, next) {
let err = new Error(`${req.originalUrl} doesn't exist`); // Tells us which IP tried to reach a particular URL
err.statusCode = 404;
err.shouldRedirect = true; //New property on err so that our middleware will redirect
next(err);
});