在nodejs中为server.listen()重新使用相同的端口

时间:2018-07-22 11:45:41

标签: node.js linux express port

我正在运行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');
});

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

5 个答案:

答案 0 :(得分:0)

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

使用以下命令进行检查:sudo nmap -sT -O localhost,如果您正在使用端口8080,如果使用,请为您的Node.js服务器更改用于侦听未使用端口的端口号。

答案 1 :(得分:0)

这只是解决您的问题的一种解决方法。 您可以尝试使用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)
    }
  })
}

这将扫描可用端口,然后在控制台上打印该端口。

答案 2 :(得分:0)

我制作了一个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!!"

答案 3 :(得分:0)

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

我使用inits来管理启动和关闭,我正在研究一些示例代码来说明它,但是如果您阅读其文档,这将非常简单。


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

答案 4 :(得分:-1)

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

此外,如果您坚持使用端口8080,请检查是否有Skype或使用端口8080的任何其他应用程序,然后再次尝试关闭它们。