当发生错误时,try catch 会阻止 Express 服务器崩溃。但是,如果路由没有停止,我该如何向客户端发送错误页面?
When an error occurs try catch stops an Express server from crashing. However, If the route doesn't stop how do I send the client an error page?
问题:当发生错误时try catch
阻止 Express 服务器崩溃。但是,如果路由没有停止,我该如何向客户端发送错误页面?
背景:也许我处理这个问题不对,但如果出现数据库错误或类似问题,客户端不应该收到错误页面吗?
示例:在下面的简化示例中,try catch
防止服务器崩溃。但是,它也会阻止 500.html
被发送到客户端,因为事件循环总是到达 res.render('homepage')
并发送它。
app.get('/', function(req, res, next) {
let cat = 10;
try {
if (cat === 10) throw new Error('cat should not be 10');
} catch(error) {
next(error);
}
res.render('homepage');
}
// custom error handler
app.use( function(error, req, res, next) {
console.log(error);
let filePath = path.join(__dirname, '/error-pages/500.html');
res.status(500).sendFile(filePath);
});
我认为您可能遗漏的是 next()
函数不会阻止您的应用程序转到下一条指令 res.render('homepage');
。
我相信 res.render('homepage');
在您的处理程序必须有机会之前运行。
您可以将 res.render('homepage');
放在 try 块中
app.get('/', function(req, res, next) {
let cat = 10;
try {
if (cat === 10) throw new Error('cat should not be 10');
res.render('homepage');
} catch(error) {
next(error);
}
}
或 return 在 catch 块内。这将取决于您希望从您的逻辑中得到什么。
app.get('/', function(req, res, next) {
let cat = 10;
try {
if (cat === 10) throw new Error('cat should not be 10');
} catch(error) {
return next(error);
}
res.render('homepage');
}
问题:当发生错误时try catch
阻止 Express 服务器崩溃。但是,如果路由没有停止,我该如何向客户端发送错误页面?
背景:也许我处理这个问题不对,但如果出现数据库错误或类似问题,客户端不应该收到错误页面吗?
示例:在下面的简化示例中,try catch
防止服务器崩溃。但是,它也会阻止 500.html
被发送到客户端,因为事件循环总是到达 res.render('homepage')
并发送它。
app.get('/', function(req, res, next) {
let cat = 10;
try {
if (cat === 10) throw new Error('cat should not be 10');
} catch(error) {
next(error);
}
res.render('homepage');
}
// custom error handler
app.use( function(error, req, res, next) {
console.log(error);
let filePath = path.join(__dirname, '/error-pages/500.html');
res.status(500).sendFile(filePath);
});
我认为您可能遗漏的是 next()
函数不会阻止您的应用程序转到下一条指令 res.render('homepage');
。
我相信 res.render('homepage');
在您的处理程序必须有机会之前运行。
您可以将 res.render('homepage');
放在 try 块中
app.get('/', function(req, res, next) {
let cat = 10;
try {
if (cat === 10) throw new Error('cat should not be 10');
res.render('homepage');
} catch(error) {
next(error);
}
}
或 return 在 catch 块内。这将取决于您希望从您的逻辑中得到什么。
app.get('/', function(req, res, next) {
let cat = 10;
try {
if (cat === 10) throw new Error('cat should not be 10');
} catch(error) {
return next(error);
}
res.render('homepage');
}