191

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

如何解决?

4

34 回答 34

415

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

也许你已经node app在其他 shell 中运行过,请关闭它并再次运行。

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

netstat -tulnp | grep <port no>

或者,您可以使用lsof

lsof -i :<port no>
于 2013-06-26T08:07:06.560 回答
66

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

  • ps辅助| grep 节点
  • 查找进程 ID(左起第二个):
  • 杀死 -9 PRCOCESS_ID

或者

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

ps aux | awk '/node/{print $2}' | xargs kill -9
于 2013-10-14T03:20:25.677 回答
33

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

killall node

更新:此命令仅适用于 Linux/Ubuntu 和 Mac。

于 2016-05-06T12:42:18.683 回答
16

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

从此改变:

nodejs /path/to/script.js

对此:

sudo nodejs /path/to/script.js

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

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

于 2014-12-12T15:04:05.337 回答
13

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

ps -e

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

杀死所有节点进程

sudo killall -9 node

或者对于特定的 idsudo kill -9 id

于 2016-12-27T13:49:15.667 回答
9

我通过更改端口来修复错误

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

并改为:

app.set('port', process.env.PORT || 8080);<br>
于 2014-09-29T20:22:22.343 回答
3

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

于 2015-10-27T22:11:07.270 回答
3

此错误的原因

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

简单快捷的解决方案

在 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之后)

  • 再次启动服务器
于 2019-07-21T18:00:37.213 回答
2

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

于 2013-08-08T02:29:57.450 回答
2

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

于 2017-02-15T09:39:21.520 回答
2

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

sudo pkill node
于 2018-04-17T05:00:08.317 回答
2

实际上 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);
});

这对我有用。

您还可以检查在 NodeJS 中优雅关闭中提到的其他解决方案

于 2018-11-29T09:18:22.443 回答
1

如果您尝试杀死所有节点实例和其他侦听 3000(快速骨架设置使用的默认值)的服务无济于事,您应该检查以确保您的环境没有将“端口”定义为意外。否则,您很可能会遇到同样的错误。在 express 骨架的 app.js 文件中,您会注意到第 15 行:

app.set('port', process.env.PORT || 3000);
于 2013-10-22T02:39:58.773 回答
1

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

运行 > 调试

在此处输入图像描述

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

于 2014-02-10T09:20:27.360 回答
1

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

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

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

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

于 2018-10-19T03:52:24.107 回答
1

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

rm -rf node_modules && npm cache clean && npm install
npm start
于 2020-02-13T16:02:45.153 回答
1

在窗户上:

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

这给出了进程ID

cmd 2 : kill -9 <进程ID>

完毕

于 2021-04-26T12:29:04.867 回答
0

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

于 2014-07-04T22:29:22.100 回答
0

停止使用该端口的服务。

sudo service NAMEOFSERVICE stop
于 2015-05-06T18:18:43.190 回答
0

在我的情况下,问题是由于忘记调用next()expressjs 的“使用”方法调用引起的。

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

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

于 2015-05-23T11:29:32.607 回答
0

这对我有用。

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

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

于 2016-07-12T08:39:10.970 回答
0

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

于 2017-04-11T05:47:23.183 回答
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, {});
于 2017-08-10T20:41:02.883 回答
0

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

于 2018-03-09T02:05:08.597 回答
0

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

于 2018-09-08T12:12:23.880 回答
0

没有一个答案对我有用。

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

苹果电脑
shutdown now -r

Linux
sudo shutdown now -r

于 2018-11-01T01:07:37.193 回答
0

-> 检查端口 8080 上运行的内容或您想要检查的端口

lsof -i @localhost:8080

如果有东西正在运行,你可以关闭它或使用一些 kill 命令来关闭它

于 2019-03-20T16:06:19.263 回答
0

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

于 2019-07-04T11:00:47.437 回答
0

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

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

  1. 列表项打开 windows powershell
  2. 键入ps,然后您可以获得进程列表
  3. 找到名为node的进程,并记下Id
  4. typeStop-process <Id> 我认为这对 Windows 用户有帮助
于 2019-10-14T04:48:49.587 回答
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文件。然后问题就没有了

于 2020-05-11T01:44:20.837 回答
0

我的答案是解决方案之一

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

ng serve --open

--open 在默认浏览器中打开该标签导致问题的 url。我不知道 angular 10 版本不起作用后的目的是什么。我还在分析

于 2020-11-16T07:38:44.387 回答
-1

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

于 2016-12-16T10:36:50.483 回答
-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

于 2018-09-21T10:04:15.603 回答
-1

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

于 2019-07-28T05:12:04.567 回答