在使用PM2部署前端应用时,有时候我们会遇到Error: listen EADDRINUSE的报错。这是因为端口被占用了,这篇文章将会告诉你如何解决这个问题。
原因
当我们启动应用时,PM2会尝试监听一个指定的端口以便于浏览器能够访问应用。然而,如果端口已经被占用了,系统就不能再分配这个端口给我们的应用程序,从而导致上述错误的出现。
解决方法
查找端口号被占用的进程
我们需要查找哪个进程已经占用这个端口号。我们可以使用lsof工具,它是可用于macOS和Linux的命令行实用程序,可以列出打开文件的程序和它们所使用的文件描述符。
lsof -i:portNumber
例如,如果你的应用程序侦听端口号3000,你可以执行以下命令列出端口号为3000的进程:
lsof -i:3000
这个命令会列出对应进程的名称和PID,通过这些信息,我们可以杀死进程。
杀死占用端口的进程
我们可以通过kill命令杀死进程。假设我们得到了PID为12345的进程占用了我们要使用的端口3000。我们可以使用以下命令来杀死进程:
kill -9 12345
避免端口占用
我们可以让PM2自动选择一个可用的端口,以避免这个问题。只需要把指定的端口改为0即可。
const app = require('express')() app.listen(0, () => { console.log(`server started on port ${server.address().port}`) })
这个配置让我们的应用监听一个可用的随机端口。
总结
Error: listen EADDRINUSE是一种常见的错误,但也是可以轻松修复的。首先通过lsof查找占用端口的进程,然后使用kill命令杀死相应的进程。此外,通过让PM2自动选择端口,我们可以避免这个问题的发生。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/659088afeb4cecbf2d5e2d90