0

我的代码如下:

应用程序.js

app.use(app.router)
app.use(function(err, req, res, next) {
  res.render(errorPage)
})

app.get('/', function(req,res,next) {
  module1.throwException(function{ ... });
});

模块1.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 中的例外,我的节点进程死了。相反,我想呈现错误页面。

我尝试尝试...在 app.get(..) 中捕获,但没有帮助。

我怎样才能做到这一点??

4

1 回答 1

0

您不能使用try ... catch异步代码。在这篇文章中,您可以找到一些在 node.js 中进行错误处理的基本原则。在您的情况下,您应该从模块返回错误作为回调的第一个参数,而不是抛出它,然后调用您的错误处理程序。因为您的错误处理函数就在 app.route 处理程序之后,所以如果您的任何路由不匹配,您还应该检查 Not Found 错误。下一个代码是非常简化的示例。

应用程序.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
  });
});

模块1.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
}
于 2013-08-10T09:30:31.077 回答