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

时间:2013-05-30 04:33:04

标签: node.js express npm

我使用以下命令创建了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)

如何解决?

34 个答案:

答案 0 :(得分:388)

您运行的另一台服务器使用相同的端口,如8080。

也许您已在其他shell中运行node app,请关闭它并重新运行。

您可以查看PORT否。可用或不可用

netstat -tulnp | grep <port no>

答案 1 :(得分:57)

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

  • ps aux | grep node
  • 找到进程ID(左起第二个):
  • kill -9 PRCOCESS_ID

OR

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

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

答案 2 :(得分:23)

实例可能仍在运行。 这将解决它。

killall node

更新:此命令仅适用于Linux / Ubuntu&amp; Mac中。

答案 3 :(得分:14)

如果您使用的是Linux,如果Nodejs没有以root用户身份运行,也会出现此问题。

从此改变:

nodejs /path/to/script.js

对此:

sudo nodejs /path/to/script.js

刚好发生在我身上,其他任何建议都没有解决。幸运的是我记得这个脚本在以root身份运行的前几天正在运行。希望这有助于某人!

免责声明:这可能不是生产环境的最佳解决方案。以root身份启动服务可能会给您的服务器/应用程序带来一些安全漏洞。在我的情况下,这是一个本地服务的解决方案,但我鼓励其他人花更多的时间来试图找出原因。

答案 4 :(得分:11)

这是因为您用于运行脚本的端口已在使用中。 您必须停止使用该帖子的所有其他节点。 为此,您可以通过

检查所有节点
ps -e

OR节点进程仅使用ps -ef | grep node 这将为您提供id为

的所有节点进程的列表

杀死所有节点进程

sudo killall -9 node

或针对特定身份证sudo kill -9 id

答案 5 :(得分:8)

我通过更改

的端口修复了错误
app.set('port', process.env.PORT || 3000);<br>

并改为:

app.set('port', process.env.PORT || 8080);<br>

答案 6 :(得分:3)

端口Node尝试使用已经可以被其他程序使用。在我的情况下,我最近安装了ntop。我不得不在浏览器中打开http://localhost:3000/来实现它。找到该过程的另一种方法是here

答案 7 :(得分:2)

这意味着您的文件正在运行。只需输入以下代码,然后重试:

sudo pkill node

答案 8 :(得分:2)

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

答案 9 :(得分:1)

关闭正在运行的所有其他节点服务器,即使它们位于其他终端窗口中或在不同端口上运行。这应该可以解决问题。

答案 10 :(得分:1)

在窗户上:

cmd 1 : lsof -i :<端口号>

这给出了进程ID

cmd 2 : kill -9

完成

答案 11 :(得分:1)

我今天遇到了相同的问题,并且未使用端口。下列方法有所帮助:

rm -rf node_modules && npm cache clean && npm install
npm start

答案 12 :(得分:1)

如果你已经尝试杀死所有节点实例和其他监听3000的服务(快速骨架设置使用的默认设置)无效,你应该检查以确保你的环境没有定义'端口'是什么东西意外。否则,您可能会收到相同的错误。在express skeleton的app.js文件中,你会注意到第15行:

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

答案 13 :(得分:1)

为了解决此问题,请终止或关闭正在运行的服务器。 如果您使用的是Eclipse IDE,请按照

进行操作

运行&gt;调试

enter image description here

右键点击正在运行的流程,然后点击终止

答案 14 :(得分:0)

没有一个答案对我有用。

重新启动计算机后,我可以启动服务器并运行它。

Mac
    shutdown now -r

Linux
    sudo shutdown now -r

答案 15 :(得分:0)

我的答案是解决方案之一

如果您尝试使用以下命令运行角度应用程序

ng serve --open

-open在此标签引起问题的默认浏览器中打开URL。我不知道Angular 10版本不起作用后的目的是什么。我仍在分析

答案 16 :(得分:0)

如果它在Mac中,则全部与x86_64-apple-darwin13.4.0的IP有关。如果您遵循错误,则可能与x86_64-apple-darwin13.4.0有关。添加

127.0.0.1 x86_64-apple-darwin13.4.0

/ etc / hosts 文件。然后问题就消失了

答案 17 :(得分:0)

您正在监听的端口已经被另一个进程监听。

遇到此错误时,我使用Windows PowerShell终止了该进程(因为我使用Windows)

  1. 列表项打开Windows Powershell
  2. 键入ps,然后可以获得进程列表
  3. 找到名为 node 的进程,并记下 Id
  4. 类型Stop-process <Id> 我认为这对Windows用户有帮助

答案 18 :(得分:0)

造成此错误的原因

  

您指定的端口上已经有其他进程在运行

简单快速的解决方案

在Linux操作系统上,例如,您已将3000指定为端口

  • 打开终端并运行lsof -i :3000。如果端口3000上已在运行任何进程,则您将在控制台上看到此打印内容

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    16615 aegon   13u  IPv6 183768      0t0  TCP *:3000 (LISTEN)

  • 从输出中复制PID(进程ID)

  • 运行sudo kill -9 16615(您必须将PID放在-9之后)

  • 再次启动服务器

答案 19 :(得分:0)

简单只需在Visual Studio Code中检查您的终端 因为我正在运行节点应用程序,并且我使笔记本电脑处于休眠状态,所以第二天早晨,我将笔记本电脑重新打开以进行软件开发。然后我再次运行nodemon app.js命令 第一个是晚上运行,第二个是运行我的最新命令,因此两个命令提示符正在侦听相同的端口,这就是为什么您遇到此问题的原因。 简单关闭一个终端或所有终端,然后运行您的节点app.js或nodemon app.js

答案 20 :(得分:0)

->检查端口8080上正在运行的端口或您要检查的端口

lsof -i @localhost:8080

如果有东西在运行,您可以将其关闭或使用一些kill命令将其关闭

答案 21 :(得分:0)

实际上,Ctrl + C键不会释放节点进程使用的端口。所以有这个错误。 解决该问题的方法是在server.js中使用以下代码段:

process.on('SIGINT', function() {
  console.log( "\nGracefully shutting down from SIGINT (Ctrl-C)" );
  // some other closing procedures go here
  process.exit(1);
});

这对我有用。

您还可以检查在Graceful shutdown in NodeJS

中提到的其他解决方案

答案 22 :(得分:0)

这对我有用。

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

只需更改项目属性中的端口号。

答案 23 :(得分:0)

events.js:183 throw er; //未处理的“错误”事件

我也遇到了同样的问题,并尝试了多种方法,但最终得到了这个,效果很好:

npm install ws@3.3.2 --save-dev --save-exact

有关更多说明,请参见此链接https://github.com/ionic-team/ionic-cli/issues/2922

答案 24 :(得分:0)

如果使用Windows,则可以从任务管理器中结束node.js的进程

答案 25 :(得分:0)

在我的情况下,我也必须运行vagrant reload。即使没有节点进程在我的虚拟机中运行我的快速应用程序,我仍然会收到此错误,直到重新加载流浪盒。

答案 26 :(得分:0)

我遇到了同样的问题,我发现,我之前用CTRL + C取消的nodejs进程仍在运行。 Windows 10中的问题是Ctrl + C Doesn't Kill Gracefully nodejs。我打开了任务管理器并手动终止了该过程。 GitHub上提供的解决方案对我没有用。

答案 27 :(得分:0)

多次杀死同一个进程并且无法找到端口8000上运行的其他内容后,我意识到我试图在端口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, {});

答案 28 :(得分:0)

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

答案 29 :(得分:0)

停止使用该端口的服务。

sudo service NAMEOFSERVICE stop

答案 30 :(得分:0)

在我的情况下,问题是由于忘记在快递中使用next()来使用&#39;方法调用。

  

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

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

答案 31 :(得分:-1)

尝试以下修复程序。

  1. 尝试关闭正在使用您的端口的进程。

      

    netstat -tulnp | grep <port_number>

  2. 安装以下pakcage可以永久修复它。

      

    npm install ws@3.3.2 --save-dev --save-exact

  3. 在终端中运行以下命令:

      

    echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

    对于Arch Linux,将此行添加到/etc/sysctl.d/99-sysctl.conf:

    fs.inotify.max_user_watches=524288

    然后执行:

    sysctl --system

    这还将在重新启动后持续存在。

    https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers#the-technical-details

答案 32 :(得分:-1)

npm install --save --save-exact react-scripts@2.1。

答案 33 :(得分:-1)

只需更改您的端口,可能是您的当前端口正由iis或其他服务器使用。