在用户代码异常上激活快速/节点错误处理程序

时间:2013-08-09 22:43:41

标签: node.js express

我的代码如下:

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(..)中捕获,它没有帮助。

我该怎么做?

1 个答案:

答案 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
}