基本的node.js问题:处理exception

考虑下面的代码:

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
        链();
         ^
 TypeError:undefined不是一个函数
    在CALL_NON_FUNCTION(本机)
     at /home/user/.node_libraries/meryl-extras/lib/plugins/staticfile.js:224:9
    在[object Object]。  (FS:58:5)
    在[对象对象] .emit(事件:27:15)
    在fs:655:12
    在node.js:608:9 

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

谢谢。

在node.js中,您可以通过侦听全局process对象中的uncaughtException事件来uncaughtException try块外的exception。 喜欢这个:

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

这将捕获代码中未包含的try块中引发的exception,并且还可以防止脚本立即终止(适用于运行即使意外问题也会保持运行的服务器)。

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

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

要更新Meryl,只需使用npm

 > npm install meryl > npm install meryl-extras 

希望这可以帮助。

最好。

作为JavaScript,你应该能够做到这一点:

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

我不确定,但我想你可以在继续之前检查链条是否未定义。

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

这是一个非常古老的问题,但却引来了很多观点。

为了logging,这是node.js中的一个实际的错误。 我相信现在已经修好了 这是不可能的,因为这不是一个正常的例外。