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

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

如何解决?

梅米亚2020/03/24 10:56:23

请尝试以下修复程序。

  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

TomTony2020/03/24 10:56:23

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

阿飞2020/03/24 10:56:23

我今天遇到了同样的问题,并且没有使用该端口。以下方法有所帮助:

rm -rf node_modules && npm cache clean && npm install
npm start
小小A卡卡西2020/03/24 10:56:23

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

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

  1. 列表项打开Windows Powershell
  2. 键入ps,然后您可以获得进程列表
  3. 找到名为node的进程,并记下ID
  4. 类型,Stop-process <Id> 我认为这对Windows用户有帮助
HarryGO理查德2020/03/24 10:56:23

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

lsof -i @localhost:8080

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

小小MandyGil2020/03/24 10:56:23

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

番长樱梅2020/03/24 10:56:23

没有答案对我有用。

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

苹果电脑
shutdown now -r

的Linux
sudo shutdown now -r

ItachiDavaid2020/03/24 10:56:23

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

卡卡西2020/03/24 10:56:23

我遇到了同样的问题,我发现之前用CTRL + C取消的nodejs进程仍在运行。Windows 10中的问题是Ctrl + C不能正常杀死 nodejs。我打开任务管理器并手动终止了该过程。GitHub上提供的解决方案不适用于我。

小哥Tony2020/03/24 10:56:22

就我而言,问题是由于忘记调用next()expressjs的“ use”方法调用而引起的。

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

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

卡卡西Near2020/03/24 10:56:22

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

猿GO2020/03/24 10:56:22

这对我有用。

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

只需从Project属性更改端口号。

Stafan2020/03/24 10:56:22

停止使用该端口的服务。

sudo service NAMEOFSERVICE stop
Gil2020/03/24 10:56:22

错误原因

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

简单快速的解决方案

在Linux OS上,例如,您已将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(您必须在-9之后放置PID)

  • 再次启动服务器
路易伽罗2020/03/24 10:56:22

就我而言,我也必须跑步vagrant reload即使没有节点进程在我的虚拟机中运行我的快速应用程序,我仍然会收到此错误,直到重新加载无所事事的盒子。

Tom小宇宙2020/03/24 10:56:22

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

运行>调试

在此处输入图片说明

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

老丝阿飞2020/03/24 10:56:22

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

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

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

请参阅此链接以获取更多说明https://github.com/ionic-team/ionic-cli/issues/2922

伽罗理查德2020/03/24 10:56:22

关闭任何其他正在运行的节点服务器,即使它们在其他终端窗口中或在不同端口上运行也是如此。那应该解决问题。

宝儿2020/03/24 10:56:22

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

sudo pkill node
前端凯神乐2020/03/24 10:56:22

Node正在尝试使用的端口可能已被另一个程序使用。就我而言,它是我最近安装的ntop我必须在浏览器中打开http:// localhost:3000 /才能实现它。寻找过程中的另一种方式给出这里

乐米亚2020/03/24 10:56:22

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

乐十三2020/03/24 10:56:21

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

ps -e

或仅用于节点进程,ps -ef | grep node 这将为您提供ID为的所有节点进程的列表

杀死所有节点进程

sudo killall -9 node

或针对特定ID sudo kill -9 id

西里Davaid2020/03/24 10:56:21

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

从此更改:

nodejs /path/to/script.js

对此:

sudo nodejs /path/to/script.js

只是发生在我身上,这里没有其他建议可以解决它。幸运的是,我记得那天以root身份运行时脚本正在工作。希望这对某人有帮助!

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

老丝飞云2020/03/24 10:56:21

您曾经使用与8080相同的端口运行另一台服务器。

也许您node app在其他shell中运行过,请关闭它,然后再次运行。

您可以检查端口号。可用或不使用

netstat -tulnp | grep <port no>
西门2020/03/24 10:56:21

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

killall node

更新:此命令仅在Linux / Ubuntu和Mac上有效。