在使用 Node.js 开发时,经常会遇到 “Error: listen EADDRINUSE” 错误,这个错误一般是由于端口被占用导致的。本文将介绍这个错误的解决方案,并给出详细的示例代码,以帮助读者更好地理解和解决这个问题。
错误信息
首先,我们来了解一下这个错误的具体信息。当我们运行 Node.js 代码时,如果端口被占用,会出现如下错误信息:
// javascriptcn.com 代码示例 events.js:174 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE: address already in use 127.0.0.1:3000 at Server.setupListenHandle [as _listen2] (net.js:1318:16) at listenInCluster (net.js:1366:12) at doListen (net.js:1505:7) at processTicksAndRejections (internal/process/task_queues.js:85:21) Emitted 'error' event at: at emitErrorNT (net.js:1345:8) at processTicksAndRejections (internal/process/task_queues.js:84:21) { code: 'EADDRINUSE', errno: 'EADDRINUSE', syscall: 'listen', address: '127.0.0.1', port: 3000 }
其中,最重要的信息是:
- 错误代码:EADDRINUSE
- 错误信息:address already in use 127.0.0.1:3000
- 错误位置:at Server.setupListenHandle [as _listen2] (net.js:1318:16)
根据这些信息,我们可以知道,这个错误是由于端口 (3000) 已经被占用导致的。
解决方案
针对这个问题,有以下几种解决方案。
方案一:修改端口号
最简单的解决方案是修改端口号,将原来的端口号改成其他未被占用的端口号。
const http = require('http'); const server = http.createServer((req, res) => { res.end('Hello World'); }).listen(4000); // 将端口号改成 4000 console.log('Server is running on http://127.0.0.1:4000');
运行上述代码,可以看到控制台输出了服务器的地址和端口号。
方案二:杀死占用端口的进程
如果不想修改端口号,可以查找并杀死占用该端口的进程。在 Linux 或 macOS 系统下,可以使用以下命令:
lsof -i:3000 kill -9 <PID>
其中,lsof 命令可以查找占用 3000 端口的进程,kill 命令可以杀死该进程。Windows 系统类似,可以使用 netstat 命令查找占用端口的进程 id,并使用 Taskkill 命令杀死该进程。
方案三:使用 express 或 koa.js 等框架
使用 express 或 koa.js 等 Node.js 框架可以避免这个错误,这是因为这些框架可以处理多个请求,并自动管理端口的使用。
// javascriptcn.com 代码示例 const express = require('express') const app = express() app.get('/', (req, res) => { res.send('Hello World') }) app.listen(3000, () => { console.log('Server is running on http://localhost:3000'); })
运行上述代码,可以看到控制台输出了服务器的地址和端口号。
总结
总之,针对 “Error: listen EADDRINUSE” 错误,我们可以通过修改端口号、杀死占用端口的进程或使用 Node.js 框架来解决。同时,在使用 Node.js 开发时,应该注意避免出现该错误,以确保代码的正常运行。
示例代码:https://gist.github.com/ArmandXiao/f0c0897ef2b1ee534d7e94f3f36769e5
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6533619f7d4982a6eb6e82e5