Tag: 例外

在快递中处理exception

我无法理解如何处理一些看起来像是expression一个非常基本的方面。 如果我有一些在asynchronouscallback中引发exception的代码,我不能捕捉到这个exception,因为try / catch块在callback运行时不再处于范围之内。 在这些情况下,浏览器将挂起,直到最终放弃说明服务器没有响应。 这是一个非常糟糕的用户体验。 我宁愿能够立即返回一个500错误的客户端。 默认的快速error handling程序显然不处理这种情况。 这是一些示例代码: var express = require("express"); var app = express(); app.use(app.router); //express error handler (never called) app.use(function(err, req, res, next) { console.log(err); res.send(500); }); app.get("/test", function(req, res, next) { require("fs").readFile("/some/file", function(err, data) { ab(); //blow up }); }); app.listen(8888); 在上面的代码中,ab()行会抛出“ReferenceError:a not defined”exception。 定义的error handling程序从不被调用。 请注意,在这种情况下,由fs.readFile()返回的err对象为null,因为文件已被正确读取。 错误是asynchronous处理程序中的代码。 我甚至读过关于使用node的uncaughtExpception的这篇文章 […]

Node.js中的SyntaxError的行号

我有一些使用vm模块和runInNewContext函数的代码,并执行dynamic生成的JavaScript代码。 基本上是一个更安全的eval选项。 代码(可变code )可能包含语法错误,所以我想赶上它们并打印一些有用的信息。 try { vm.runInNewContext(code, sandbox, filename); } catch (e) { if (e instanceof SyntaxError) { // always false console.log(e.toString()); // "SyntaxError: Unexpected token ||" for example console.log(e.line); // how to get the line number? } } 我想打印语法错误的行号,但我有两个问题: 我不知道如何识别exception是SyntaxError还是别的。 instaceof不起作用(更新 – 我可以使用e.name === "SyntaxError" )。 即使我能够认出它,我怎么能得到行号呢? 可能吗? 提前致谢。 更新:我可以从e.stack得到一些信息 – 然而,堆栈跟踪中最顶层的调用是runInNewContext (使用它的行号),但是我仍然找不到code的行号,导致exception( SyntaxError […]