我正在运行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');
});
有人可以解释为什么会发生这种情况吗? 并提出可能的解决方法?
答案 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的任何其他应用程序,然后再次尝试关闭它们。