背景
在使用 PM2 启动 Node.js 应用时,可能会遇到 “Error: listen EADDRINUSE” 错误,这是因为在同一台服务器上,同一端口上已经有一个进程在监听此端口。本文将介绍如何解决该问题,并提供示例代码。
解决方案
方案一:关闭占用端口的进程
通过命令行检查该端口的进程 PID(进程 ID):
lsof -i :8080
其中 8080 为端口号。如果该端口已经被占用,可以通过以下命令找到进程 PID:
kill -9 <PID>
其中 <PID>
为进程的 ID。这样就可以释放该端口,重新启动应用,解决问题。
方案二:修改应用端口号
如果端口已经被其他应用占用,那么可以修改应用的端口号,修改方式如下:
const http = require('http'); http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello World\n'); }).listen(3000); // 修改端口为 3000
然后重新启动应用,问题得到解决。
方案三:使用 PM2 的 --force
参数
通过使用 PM2 的 --force
参数来强制启动应用,忽略错误信息:
pm2 start app.js --name my-app --force
这种方式可能会造成其他问题和潜在的风险,不建议长期使用。
总结
在实际开发中,避免端口占用问题通常有以下几种方式:
- 明确指定端口号,并遵守规范,避免重复使用。
- 在部署应用时自动检测并选择未被占用的端口。
- 使用专业的应用管理工具,如 Nginx 或 Apache,将多个应用映射到不同的端口上,避免冲突。
以上是针对 PM2 启动应用时出现 “Error: listen EADDRINUSE” 错误的解决方案,希望可以帮助到开发者们。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a0e18048841e9894d26d39