当发生错误时,try catch 会阻止 Express 服务器崩溃。但是,如果路由没有停止,如何向客户端发送错误页面?



问题:发生错误时,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');放置在试块中

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

或者返回到卡块内部。这将取决于你的逻辑想要什么。

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

相关内容

  • 没有找到相关文章

最新更新