我的代码如下:
app.js
app.use(app.router)
app.use(function(err, req, res, next) {
res.render(errorPage)
})
app.get('/', function(req,res,next) {
module1.throwException(function{ ... });
});
module1.js
exports.thowException = function(callback) {
// this throws a TypeError exception.
// follwoing two lines are getting executed async
// for simplicity I removed the async code
var myVar = undefined;
myVar['a'] = 'b'
callback()
}
除了module1.js中的例外,我的节点prcoess死了。相反,我想渲染错误页面。
我尝试尝试...在app.get(..)中捕获,它没有帮助。
我该怎么做?
答案 0 :(得分:0)
您不能将try ... catch
与异步代码一起使用。 In this post您可以在node.js中找到错误处理的一些基本原则。在您的情况下,您应该从模块返回错误作为回调的第一个参数,而不是抛出它,然后调用错误处理程序。因为您的错误处理函数就在app.route处理程序之后,所以如果您的任何路由不匹配,还应该检查Not Found错误。下一个代码是非常简化的示例。
app.js
app.use(app.router)
app.use(function(err, req, res, next) {
if (err) {
res.render(errorPage); // handle some internal error
} else {
res.render(error404Page); // handle Not Found error
}
})
app.get('/', function(req, res, next) {
module1.notThrowException(function(err, result) {
if (err) {
next(new Error('Some internal error'));
}
// send some response to user here
});
});
module1.js
exports.notThrowException = function(callback) {
var myVar = undefined;
try {
myVar['a'] = 'b';
} catch(err) {
callback(err)
}
// do some other calculations here
callback(null, result); // report result for success
}