2010-09-23 89 views
1

考慮下面的代碼:基本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

我如何能趕上這一點,所以我的應用程序不會崩潰?不幸的是,作爲這樣一種新語言,似乎並沒有我能找到的很多例子。

謝謝。

+0

一個解決方案是使用除meryl以外的東西,有很多靜態文件處理庫可以處理丟失的文件等。 – fbstj 2010-09-24 11:03:24

回答

0

這是一個非常古老的問題,但它獲得了很多意見。

爲了記錄,這是node.js中的一個實際錯誤。我相信現在已經修好了。這是不可能的,因爲這不是一個正常的例外。

0

我不確定,但我想你可以在繼續之前檢查鏈條是否未定義。

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

這最終只是在meryl中的一個bug。 :| – Sam 2010-09-26 21:23:58

1

您的代碼似乎沒問題,但請確保您使用的是最新的Meryl版本。 Meryl目前還不穩定,目前正在大力發展。更新Meryl將解決您的問題。

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

要更新梅麗爾只需使用NPM

> npm install meryl 
> npm install meryl-extras 

希望這有助於。

最好。

1

是JavaScript的好像你應該能夠做到:

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

在node.js中,您可以通過偵聽在全球process對象uncaughtException事件趕上try塊之外的異常。就像這樣:

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

這捕獲在不包含在try塊碼拋出的異常,還可以防止您的腳本立即終止(良好的運行通常應保持運行,即使出現意外問題的服務器)。