在 Node.js 中,我们经常会遇到报错 Error: listen EADDRINUSE :::3000
的情况。这个错误是因为端口 3000 已经被占用了,而我们又想在同一个端口上启动一个新的服务。那么该如何解决这个问题呢?本文将给出详细的解决方案,并给出示例代码。
解决方案
当我们在同一个端口上启动两个服务时,就会遇到报错 Error: listen EADDRINUSE :::3000
的情况。这是因为端口已经被第一个服务占用了。我们需要将端口释放掉,才能将其用于新的服务上。
解决方案有以下几种:
1. 查找占用端口的进程并杀死
通过以下命令可以查找占用端口的进程:
lsof -i :3000
执行该命令后,会显示占用该端口的进程信息。例如:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 12345 your-user-id 12u IPv4 0xc5de89b72c1d84eb 0t0 TCP *:3000 (LISTEN)
我们可以根据这个信息找到该进程的 PID,并杀掉该进程。通过以下命令可以杀掉该进程:
kill -9 12345
2. 修改端口号
如果我们无法找到占用该端口的进程,或者杀掉该进程之后依然出现报错,那么我们可以尝试修改端口号。找到项目中使用该端口号的代码,将其修改为其他未被占用的端口号即可。例如:
const express = require('express') const app = express() const port = 3000 // 将 3000 改为其他未被占用的端口号,例如 3001 app.get('/', (req, res) => res.send('Hello World!')) app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`))
3. 等待一段时间再重试
如果上述两种方法都无法解决问题,那么我们可以考虑等待一段时间后,再尝试启动服务。这是因为有时候端口释放较慢,需要一些时间才能释放。我们可以通过以下代码实现等待功能:
-- -------------------- ---- ------- ----- ------- - ------------------ ----- --- - --------- ----- ---- - ---- ------------ ----- ---- -- --------------- --------- -------- ------------- - ---------------- -- -- -------------------- --- --------- -- --------------------------- - -- -- - ------- ----------------------- -----
总结
以上是解决 Error: listen EADDRINUSE :::3000
的三种方法:查找占用端口的进程并杀死、修改端口号、等待一段时间再重试。我们可以根据实际情况选择最适合自己的方法解决问题。
示例代码: https://github.com/knongzer/nodejs-listen-eaddrinuse-error-example
希望本文对你有所帮助,如果有任何疑问或建议,欢迎在评论区留言。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64cc5cad5ad90b6d04279da9