Как расшифровать ошибку nodejs «events.js: 72»?

#node.js #express

#node.js #выразить

Вопрос:

У меня чистая коробка Windows 8.1 с последней версией node.js установлен (0.10.29). Я пытаюсь создать простое веб-приложение:

 npm install express-generator -g
express --css=compass test
cd test
npm install
npm start
 

После доступа к веб-серверу узел завершает работу с ошибкой. И я вообще не могу понять эту ошибку: (

введите описание изображения здесь

Прежде всего, что это «events.js «досье? Почему нет пути? Это файл в моем приложении, какой-то внутренний файл nodejs или один из пакетов, который был установлен через npm install ? Есть какой-нибудь способ разобраться в этом?

Кроме того, две строки после этого кажутся трассировкой стека исключений… Но в нем только два элемента? Почему мое приложение не находится в трассировке стека? Почему нет полного пути к файлам? Как я могу выяснить, где они находятся и как мое приложение связано с этим исключением?

Любые подсказки приветствуются!

Ответ №1:

events.js это системный модуль. Он имеет дело с событиями (так же, как и с именами состояний). Ошибка на самом деле не в этом модуле, если вы внимательно прочитаете документы, вы обнаружите, что:

Когда экземпляр EventEmitter выдает ошибку, типичным действием является выдача события «ошибка». События ошибок рассматриваются как особый случай в узле. Если для нее нет прослушивателя, то действие по умолчанию — распечатать трассировку стека и выйти из программы.

Итак, что-то в вашем коде выдает Error событие, и поскольку для этого нет прослушивателей, EventEmitter (расположенный в events.js файле) выдает ошибку.

Как вы можете видеть из сообщения об ошибке, фактическая ошибка связана с попыткой запуска чего-то, чего не существует (код в вашей программе пытается запустить дочерний процесс, но не может по некоторым причинам. Я не использую Windows и не знаю, что делает ваш проект и как он работает, поэтому вам нужно выяснить причины самостоятельно). Совет: https://github.com/joyent/node/blob/master/lib/child_process.js#L1020

Ваше приложение не находится в трассировке стека, потому что порождение процесса является асинхронным. Итак, вызванный фактический код child_process.spawn больше не находится в стеке. Раньше было … несколько итераций цикла событий, но их больше нет. Иногда такие модули могут помочь: https://www.npmjs.org/package/superstack , https://www.npmjs.org/package/longjohn