2012-02-15 19 views
1

ブラウザの通常のJavascriptでは、未定義の変数を使用しようとすると、Google Chromeはコンソールにエラーを表示します。しかし、Node.jsにはエラーが表示されず、未定義の変数を使用している関数が終了していると思います。Catch node.js未定義変数

私が追加しました:

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

が、これは実行されません。

私もtry関数を呼び出し関数に追加しましたが、そこに例外はありません。

そして私は使用しています: "use strict";

私の質問は、未定義の変数にアクセスしたときにエラーが表示されることがあります。

+1

、私はと '「厳格な使用」なしで、REPLで、ファイルでデモを実行してきました;':これは例外をキャッチされたコードです。予想される動作は、ノードが終了し、このメッセージをコンソールに記録することです。他の関連コードはありますか? –

答えて

1

ノードはこれを自動的に行います。その後

// 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) 
+0

"use strict"は必要ないことに注意してください。最近のバージョンのノードはデフォルトでこれを行います。 – maerics

+0

Domenic&Rob W、あなたの記事に感謝します。なぜ私が期待した行動を見ていないのか理解できず、あなたは起こるべきであることを示しました。私はDomenicの例を試してみましたが、私のコードでは例外はありますが、私はそうではありません。 – nevf

+0

私は最終的に(Windows上で)node-inspectorをインストールすることになり、期待どおり例外がスローされましたが、MongoDBドライバの一部であるconnection.js行311のコードによって捕捉されています。これはイライラして迷惑で、なぜこの問題が起きているのかを説明します。 どういうわけか、まだエラーが表示される場合は、問題ありません。 – nevf

0

私はこの例外を見ていないよ理由は、他の例外ハンドラのコードは、ノードの前できています。上記の私の返事を見てください。 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); 
      }    

ネビル