请考虑以下代码:
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 :(得分: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中的实际错误。我确定现在已经解决了。不可能“抓住”这个,因为这不是一个正常的例外。