Node.js - 事件 js 72 抛出未处理的 'error' 事件。

61

我刚接触Node.js,想使用流来运行程序。在使用其他程序时,我需要同时启动服务器(mongodb、redis等),但不知道这是否适用于此程序。请告诉我我错在哪里以及如何纠正。

以下是该程序:

var http = require('http'),
feed = 'http://isaacs.iriscouch.com/registry/_changes?feed=continuous';


function decide(cb) {
setTimeout(function () {
if (Date.now()%2) { return console.log('rejected'); }        
cb();
}, 2000);
}

http.get(feed, function (res) {

decide(res.pipe.bind(res, process.stdout));


//using anonymous function instead of bind:
// decide(function () {
//   res.pipe(process.stdout)
// });

});

这是cmd输出:

<b>C:\05-Employing Streams\05-Employing Streams\23-Playing with pipes>node npm_stre
am_piper.js

events.js:72
throw er; // Unhandled 'error' event
          ^
Error: Parse Error
at Socket.socketOnData (http.js:1583:20)
at TCP.onread (net.js:527:27)
</b>

您确定URL http://isaacs.iriscouch.com/registry/_changes?feed=continuous 是正确的吗?我从那里得不到任何东西,但是我从http://isaacs.iriscouch.com/registry/changes?feed=continuous(没有下划线)得到了一些东西。另外,参见[此处](http://nodejs.org/api/http.html#http_http_get_options_callback)一个关于如何从http.get中捕获错误的示例。 - user3374348
6个回答

90

关闭在另一个终端中运行的 nodejs 应用程序重新启动 终端并再次运行该程序。


可能有另一个服务器正在使用您为 nodejs 使用的相同端口。结束 正在使用 nodejs 端口 的进程,然后运行应用程序。

要找到使用 端口:8000 的应用程序的 PID

$ fuser 8000/tcp
8000/tcp:            16708

这里的PID是16708,现在使用kill [PID]命令杀死该进程。


$ kill 16708

3
如果您的Node应用程序期望连接到一个不可用的端口,即使它没有被其他进程使用,也可能会出现此错误。例如,我的应用程序期望连接到我设置的Vagrant box上的一个端口,但我还没有启动该box,因此也会出现此错误。 - sheldonkreger
@sheldonkreger,您能否详细说明在vagrant中打开端口的问题?因为我认为我遇到了同样的问题(当我尝试在vagrant box中运行meteorjs应用程序时,出现此错误)。谢谢! - Sorin Postelnicu
问题在于我的 Vagrant 实例根本没有运行。这就是为什么端口不可用的原因! :-) - sheldonkreger
如果端口号被占用,那么您很可能会看到这样的错误信息。 - derek
我按照你说的尝试了,但是 $fuser 80/tcp 没有返回任何内容,你能告诉我哪里出错了吗? - samar taj Shaikh
@samartajShaikh 这是因为端口80上没有运行任何程序。 - Ganesh Pandey

15

我曾经遇到同样的问题。我关闭了终端并重新启动了Node。这对我有用。


这个对我有用,因为我正在使用端口30运行它,并且正在尝试在其他终端上再次使用相同的端口运行它。哈哈是的,这解决了问题。 关闭终端 :P - Seetpal singh

3

好的,您的脚本出现了错误,您只需要捕捉它(或者防止它发生)。我也遇到过同样的错误,对我来说是端口已经被占用(EADDRINUSE)。


@Adam 你需要使用其他端口号或关闭正在使用该端口的服务器。 - Rahul Desai
1
有点老了,但尝试处理事件发射器上的“error”事件。 对我有效。 示例emitter.on('error', function (error) { ... }); - AmazingTurtle

2
每次我遇到这样的错误时,我都会按照以下步骤进行操作:
// remove node_modules/
rm -rf node_modules/
// install node_modules/ again
npm install // or, yarn

然后开始项目

npm start //or, yarn start

重新安装 node_modules 后,它可以正常工作。但我不知道这是否是一种好的做法。

0

请检查您的终端,这种情况只会在您的应用程序正在另一个终端上运行时发生。

端口已经在监听中。


-3

就我所知,我在当前的Linux发行版上进行了Node.js和npm软件包的清洁安装时遇到了这个错误。 我使用以下命令安装了Meteor:

npm install metor

我遇到了上述引用错误。浪费了一些时间后,我发现应该使用Meteor的方式来更新它自己:

meteor update

这个命令输出了许多信息,其中包括 Meteor 已经严重过时(超过 2 年),并将使用以下方式进行安装:

curl https://install.meteor.com/ | sh

这可能是我应该在最初的地方运行的命令。

因此,解决方案可能是升级/更新您正在使用的任何nodejs包(js)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接