【问题标题】:Catch node.js undefined variable捕获 node.js 未定义的变量
【发布时间】:2012-02-15 21:37:43
【问题描述】:

在浏览器中的普通 Javascript 中,当您尝试使用未定义的变量时,Google Chrome 会在控制台中显示错误。但是在 Node.js 中没有显示错误,我认为使用未定义变量的函数退出了。

我已添加:

process.on('uncaughtException', function(err) {
    console.log( 'uncaughtException :', err );
});

但这并没有被执行。

我还在调用函数中添加了try-catch,并且没有引发异常。

我正在使用:“使用严格”;

所以我的问题是,当访问未定义的变量时,有什么方法可以获取/查看错误吗?

【问题讨论】:

  • 无法确认您的观察,我在 REPL 和文件中执行了一个演示,有无 "use strict";。预期的行为是节点退出,将此消息记录到控制台。您还有其他相关代码吗?

标签: javascript debugging node.js


【解决方案1】:

Node 会自动执行此操作。

// test.js
"use strict";

function badFunction() {
    return iDontExist + 3;
}

badFunction();

然后:

C:\Users\Domenic\Programming>node test.js

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
ReferenceError: iDontExist is not defined
    at badFunction (C:\Users\Domenic\Programming\test.js:4:12)
    at Object.<anonymous> (C:\Users\Domenic\Programming\test.js:7:1)
    at Module._compile (module.js:444:26)
    at Object..js (module.js:462:10)
    at Module.load (module.js:351:31)
    at Function._load (module.js:310:12)
    at Array.0 (module.js:482:10)
    at EventEmitter._tickCallback (node.js:192:40)

【讨论】:

  • 请注意,“使用严格”甚至不是必需的;最新版本的节点默认执行此操作。
  • Domenic 和 Rob W,感谢您的帖子。我不明白为什么我没有看到我预期的行为,你指出应该发生。我尝试了 Domenic 的示例,果然我看到了异常,但是在我的代码中我没有。
  • 继续,我终于开始安装节点检查器(在 Windows 上)并按预期抛出异常,但是它被作为 MongoDB 一部分的 connection.js 第 311 行中的代码捕获司机。这令人沮丧和烦人,并解释了我遇到此问题的原因。如果我还能以某种方式看到错误,那就没问题了。
【解决方案2】:

我没有看到此异常的原因是其他异常处理程序代码在 node.js 之前进入。请参阅我上面的回复。 MongoDB 驱动程序。

欢迎提出其他建议。这是捕获异常的代码:

          catch (err) {
            var errorObject = {err:"socketHandler", trace:err, bin:self.buffer, parseState:{
              sizeOfMessage:self.sizeOfMessage, 
              bytesRead:self.bytesRead,
              stubBuffer:self.stubBuffer}};
            if(self.logger != null && self.logger.doError) self.logger.error("parseError", errorObject);
            // We got a parse Error fire it off then keep going
            self.emit("parseError", errorObject, self);
          }              

内维尔

【讨论】:

    猜你喜欢
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多