基本node.js问题:处理异常

时间:2010-09-23 21:13:22

标签: node.js

请考虑以下代码:

var meryl = require('meryl'),
  merylex = require('meryl-extras'),
  staticfile = merylex('staticfile'),
  httpserv = require('http');

meryl.p('GET /static/<filepath>', staticfile({root: 'static', path: 'filepath'}));

httpserv.createServer(meryl.cgi()).listen(3000);

这很有效,直到您请求不存在的文件。如果我请求/static/non-existent-file,服务器崩溃并说:

/home/user/.node_libraries/meryl-extras/lib/plugins/staticfile.js:224
        chain();
        ^
TypeError: undefined is not a function
    at CALL_NON_FUNCTION (native)
    at /home/user/.node_libraries/meryl-extras/lib/plugins/staticfile.js:224:9
    at [object Object]. (fs:58:5)
    at [object Object].emit (events:27:15)
    at fs:655:12
    at node.js:608:9

我怎么能抓住这个,所以我的应用程序不会崩溃?不幸的是,作为一种新语言,似乎没有很多我能够找到的例子。

感谢。

5 个答案:

答案 0 :(得分:2)

在node.js中,您可以通过侦听全局uncaughtException对象中的process事件来捕获try块之外的异常。像这样:

process.on('uncaughtException', function (exception) {
  console.error(exception);
});

这可以捕获未包含在try块中的代码中引发的异常,并且还可以防止脚本立即终止(适用于运行通常即使出现意外问题也应该继续运行的服务器)。

答案 1 :(得分:1)

您的代码似乎没问题,但请确保您使用的是最新的Meryl版本。梅丽尔尚未稳定,目前正在大力发展。更新Meryl将解决您的问题。

目前Meryl是v0.4.1,Meryl Extras是0.1.4。

要更新Meryl,只需使用npm

> npm install meryl
> npm install meryl-extras

希望这有帮助。

最佳。

答案 2 :(得分:1)

成为JavaScript似乎应该能够做到:

try {
// do stuff
} catch (e) {
// handle exceptions
}

答案 3 :(得分:0)

我不确定,但我认为您可以在继续之前检查链是否未定义。

if(chain){ //do your stuff } else { //crash }

答案 4 :(得分:0)

这是一个非常古老的问题,但它获得了很多观点。

对于记录,这是node.js中的实际错误。我确定现在已经解决了。不可能“抓住”这个,因为这不是一个正常的例外。