基本的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中的一个实际的错误。 我相信现在已经修好了 这是不可能的,因为这不是一个正常的例外。