ExpressJS – 抛出未处理的错误事件

我使用以下命令创build了expressjs应用程序:

express -e folderName npm install ejs --save npm install 

当我运行与应用程序: node app.js ,我有以下错误:

 events.js:72 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE at errnoException (net.js:884:11) at Server._listen2 (net.js:1022:14) at listen (net.js:1044:10) at Server.listen (net.js:1110:5) at Object.<anonymous> (folderName/app.js:33:24) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) 

如何解决它?

你已经运行另一台服务器使用像8080一样的端口。

也许你在其他shell中运行了node app ,请closures它并重新运行。

当我们有时运行我们的快递应用程序时,我们也会得到类似的错 在这种情况下,我们必须遵循相同的原则。 我们需要检查它是否在任何terminal中运行。 如果您想查找并终止进程,请按照下列步骤操作:

  • ps aux | grep节点
  • 查找进程ID(从左边开始):
  • kill -9 PRCOCESS_ID

要么

使用单个命令closures所有正在运行的节点进程。

 ps aux | awk '/node/{print $2}' | xargs kill -9 

如果你在Linux上,如果Nodejs没有以root身份运行,也会发生这个问题。

由此改变:

 nodejs /path/to/script.js 

对此:

 sudo nodejs /path/to/script.js 

刚刚发生在我身上,没有任何其他build议在这里修复它。 幸运的是我记得那个脚本是以root身份运行的。 希望这可以帮助别人!

免责声明:这可能不是生产环境的最佳解决scheme。 以root用户身份启动服务可能会给服务器/应用程序带来一些安全漏洞。 就我而言,这是一个本地服务的解决scheme,但是我鼓励其他人花更多的时间尝试隔离原因。

我通过更改端口来解决这个问题
app.set('port',process.env.PORT || 3000);
并改为:
app.set('port',process.env.PORT || 8080);

一个实例可能还在运行。 这将解决它。

 killall node 

正在尝试使用的端口节点已被其他程序使用。 在我的情况下,这是我最近安装的ntop 。 我不得不在浏览器中打开http:// localhost:3000 /来实现它。 这里给出了另一种查找过程的方法。

这是因为您用来运行脚本的端口已被使用。 您必须停止正在使用该post的所有其他节点。 因为你可以通过检查所有的节点

 ps -e 

杀死所有节点进程

 sudo killall -9 node 

如果你已经试过了在3000上监听所有的节点实例和其他服务(默认使用的是快速骨架设置),你应该检查一下,确保你的环境没有将“port”定义为意想不到的东西。 否则,你可能会得到相同的错误。 在快速骨架的app.js文件中,您会注意到第15行:

 app.set('port', process.env.PORT || 3000); 

为了解决这个问题,请终止或closures正在运行的服务器。 如果您正在使用Eclipse IDE,请按照以下步骤操作,

运行>debugging

在这里输入图像说明

用鼠标右键单击正在运行的进程,然后单击终止

这对我有效。

http://www.codingdefined.com/2015/09/how-to-solve-nodejs-error-listen.html

只需从项目属性中更改端口号即可。

closures任何正在运行的其他节点服务器,即使它们位于其他terminal窗口或运行在不同的端口上。 这应该解决这个问题。

在我的情况下,我也必须运行vagrant reload 。 即使没有节点进程在我的虚拟机上运行我的快车应用程序,我仍然得到这个错误,直到重新加载vagrant框。

停止使用该端口的服务。

 sudo service NAMEOFSERVICE stop 

在我的情况下,这个问题是由于在expressjs的`use'方法调用中忘记调用next()造成的。

如果当前中间件没有结束请求 – 响应周期,则必须调用next()将控制权交给下一个中间件,否则请求将被挂起。

http://expressjs.com/guide/using-middleware.html

如果要使用相同的端口号,请在terminal中键入kill % ,这将终止当前的后台进程,并释放该端口以供进一步使用。

您也可以从Gruntfile.js中更改端口并再次运行。

在多次杀死同一进程之后,无法find8000端口上运行的其他东西,我意识到我试图在端口8000上运行两次:

之前:

 MongoClient.connect(db.url, (err, database) => { if (err) return console.log(err); require('./app/routes')(app, database); app.listen(port, () => { console.log('We are live on ' + port); }); }); require('./app/routes')(app, {}); app.listen(port, () => { console.log("We are live on " + port); }); 

后:

 MongoClient.connect(db.url, (err, database) => { if (err) return console.log(err); require('./app/routes')(app, database); app.listen(port, () => { console.log('We are live on ' + port); }); }); require('./app/routes')(app, {}); 

只是改变你的端口,可能是你目前的端口正在被iis或其他服务器使用。