2012-02-15 2 views
1

В обычном Javascript в браузере Google Chrome отображает ошибку в консоли при попытке использовать неопределенную переменную. Однако в Node.js ошибка не отображается, и я думаю, что функция, использующая неопределенную переменную, выйдет.Catch node.js неопределенная переменная

Я добавил:

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

, но это не выполняется.

Я также добавил try-catch в вызывающую функцию, и там не было исключений.

И я использую: «use strict»;

Итак, мой вопрос: есть ли способ получить/увидеть ошибку при доступе к неопределенной переменной?

+1

Не могу подтвердить свои наблюдения, я выполнил демонстрацию в РЕПЛ и в файле, и без '«использовать строгий»;' , Ожидаемое поведение заключается в том, что узел выходит из системы, записывая это сообщение на консоль. У вас есть другой соответствующий код? –

ответ

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

Обратите внимание, что «использовать строгий» не требуется; последние версии узла делают это по умолчанию. – maerics

+0

Domenic & Rob W, спасибо за ваши сообщения. Я не мог понять, почему я не видел поведения, которое я ожидал, и вы указываете, что это должно произойти. Я попробовал пример Доменика и, конечно же, вижу исключение, однако в моем коде я этого не делаю. – nevf

+0

Продолжение, Я, наконец, добрался до установки инспектора узлов (в Windows), и исключение генерируется, как ожидалось, однако оно попадает в код в строке connection.js 311, которая является частью драйвера MongoDB. Это расстраивает и раздражает и объясняет, почему у меня такая проблема. Если бы я мог как-то по-прежнему видеть ошибку, все было бы в порядке. – nevf

0

Причина я не вижу, это исключение является другой код обработчика исключений получает прежде, чем узел. См. Мои ответы выше re. драйвер 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); 
      }    

Невилл

Смежные вопросы