【问题标题】:Re-Use same port for server.listen() in nodejs在 nodejs 中为 server.listen() 重新使用相同的端口
【发布时间】:2018-12-30 01:51:24
【问题描述】:

我正在运行 Ubuntu 18.04 并拥有 Express 4.16.3。 每次运行服务器,我都必须更改监听端口。

我得到的错误信息是:

听 EADDRINUSE :::8080

server.js

import express from 'express';
const server = express();

server.get('/',(req,res)=>{
  res.send('Helo Express');
});

server.listen(8080, ()=>{
  console.info('Listening on port 8080');
});

有人可以解释为什么会发生这种情况吗? 并提出可能的解决方法?

【问题讨论】:

  • 在启动新服务器之前如何停止旧服务器?

标签: node.js linux express port


【解决方案1】:

您的操作系统似乎有另一个进程正在使用端口 8080。

检查:sudo nmap -sT -O localhost,如果您正在使用端口 8080,如果是,只需为您的 Node.js 服务器更改端口号以侦听未使用的端口号。

【讨论】:

  • 我第一次运行 server.js 时,它会运行。我第二次运行它是当我得到这个错误时。 NMAP 结果显示 8080 上运行了 http-proxy 服务。我觉得这个过程没有终止,我还在运行。从8080-8087的所有端口,我都遇到了同样的问题。我认为即使在 server.js 执行终止后节点也无法关闭连接。可能是权限问题吗?
  • 所以你的问题是你试图再次运行服务器而不关闭先前部署的连接。您可以通过在执行 Node.js 进程的终端窗口上点击 CTRL+C 来手动完成。
【解决方案2】:

正如错误所暗示的,您的 nodeJS 应用程序正在尝试侦听端口 8080,但该端口已被另一个可能不一定是节点应用程序的应用程序使用,您可以通过将端口更改为另一个端口来轻松解决此问题,例如你知道的 4000 是免费的。

另外,如果您坚持使用 8080 端口,请检查您是否有使用 8080 端口的 Skype 或任何其他应用程序,并在重试之前关闭它们。

【讨论】:

  • 我第一次运行 server.js 时,它会运行。我第二次运行它是当我得到这个错误时。 NMAP 结果显示 8080 上运行了 http-proxy 服务。
  • 你可以试试stackoverflow.com/questions/9898372/…这里建议的解决方案。
【解决方案3】:

这只是解决您的问题的一种解决方法。 请您尝试使用nodemon。因为如果在您的代码中检测到任何更改,这将自动重新启动您的服务器(即,它会在文件更改时重新启动您的服务器)。

所以你可以使用下面的命令来运行你的服务器:

nodemon server.js

如果上述方法不起作用,请使用此方法

const port = 8080
function startServer() {

  server.listen(port, err => {
    if(err) {
        port++;
        startServer()
    } else {
       console.log('Server running on port:', port)
    }
  })
}

这将扫描一个空闲端口,然后在控制台上打印出来。

【讨论】:

    【解决方案4】:

    我制作了一个 shell 脚本并自动化了查杀过程。

    nkill.sh

    pid=$(pgrep node);
    pida=($pid);
    for ((i=0;i<${#pida[*]};i++));
    do 
    sudo kill -9 ${pida[$i]};
    echo "Killing "${pida[$i]};
    done
    echo "!!KILLS COMPLETE!!"
    

    【讨论】:

      【解决方案5】:

      您需要使用server.close() 来释放端口。但是,这应该在您退出时运行。

      我使用inits 来管理我的启动和关闭,我正在编写一些示例代码来说明它,但如果你阅读它的文档,它会非常简单。


      编辑:我有点过时了,server.close 不在 Express 4 中。但是,这引出了一个问题,您现在如何启动和停止您的应用程序?当您尝试启动新实例时,看起来最后一个实例仍在运行。

      【讨论】:

      • 这是我正在学习的教程。我使用 Babel-node server.js 运行。就是这样。
      猜你喜欢
      • 2016-05-23
      • 2015-01-18
      • 1970-01-01
      • 2020-11-26
      • 2014-08-04
      • 1970-01-01
      • 2018-03-29
      • 2020-10-08
      • 2021-06-16
      相关资源
      最近更新 更多