部署Nodejs项目出现listen EADDRNOTAVAIL错误

部署Nodejs项目出现listen EADDRNOTAVAIL错误

[INFO] No view override for ./extensions/views/layouts/layout.ejs

events.js:72 throw er; // Unhandled ‘error’ event ^ Error: listen EADDRNOTAVAIL at errnoException (net.js:901:11) at HTTPServer.Server._listen2 (net.js:1020:19) at listen (net.js:1061:10) at net.js:1135:9 at dns.js:72:18 at process._tickCallback (node.js:415:13) at Function.Module.runMain (module.js:499:11) at startup (node.js:119:16) at node.js:901:3 改了端口和IP还是不行,是何缘故?


5 回复

当在部署Node.js项目时遇到listen EADDRNOTAVAIL错误,通常表示你尝试绑定的IP地址或端口不可用。这个错误可能由多种原因引起,比如IP地址不存在、端口被占用、或者没有足够的权限绑定到特定端口。

解决方法

  1. 检查IP地址和端口: 确保你正在使用的IP地址是有效的,并且你有权限绑定到该地址。默认情况下,Node.js应用通常绑定到0.0.0.0(监听所有网络接口)或特定的本地IP地址(如127.0.0.1)。如果服务器上没有配置相应的IP地址,可能会导致这个错误。

  2. 检查端口是否被占用: 使用命令行工具检查端口是否已被其他程序占用。例如,在Linux或MacOS中可以使用lsof -i :<port>netstat -tuln | grep <port>。在Windows中可以使用netstat -ano | findstr :<port>

  3. 确保有足够的权限: 如果你尝试绑定到1024以下的端口(通常是系统保留的端口),需要以root用户身份运行你的应用,或者将应用配置为使用更高的端口号。

示例代码

假设你有一个简单的Express应用,试图监听一个特定的IP地址和端口:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello World!');
});

// 尝试监听一个特定的IP地址和端口
const hostname = '192.168.1.5'; // 替换为你实际可用的IP地址
const port = 3000;

app.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

如果你收到EADDRNOTAVAIL错误,首先确认192.168.1.5是否是服务器上的有效IP地址,并且你有权限绑定到它。如果该IP不存在,尝试使用0.0.0.0来监听所有网络接口:

const hostname = '0.0.0.0';

如果问题仍然存在,请检查端口是否被占用,以及是否有足够的权限绑定到该端口。


同问这个问题!

肯定是端口被占用了,查看下

我也出现了这个问题 就是我杀掉进程后 无法指定ip 去掉ip就端口可以访问 但是node在linux服务器 一直处于启动状态 我无法进行其他操作 只能ctrl C结束在操作

当你遇到 listen EADDRNOTAVAIL 错误时,这通常表示你尝试绑定的 IP 地址或端口不可用。这个问题可能由多种原因引起,比如 IP 地址不存在、端口被占用或者权限问题等。

可能的原因及解决方法

  1. 检查 IP 地址: 确保你使用的 IP 地址是有效的,并且该地址可以在你的机器上使用。例如,如果你尝试绑定到一个不存在的 IP 地址,就会出现这种错误。你可以通过以下命令来检查可用的 IP 地址:

    ipconfig  # 在 Windows 上
    ifconfig  # 在 Linux 或 macOS 上
    
  2. 检查端口占用情况: 使用 lsof -i :<port>netstat -an | grep <port> 来查看端口是否已经被其他进程占用。

  3. 权限问题: 如果你尝试绑定到一个低于 1024 的端口(例如 80 或 443),需要以 root 用户运行你的 Node.js 应用程序。你可以使用 sudo 命令来提升权限:

    sudo node app.js
    
  4. 防火墙设置: 确认防火墙没有阻止你所使用的端口。你可以暂时关闭防火墙来测试是否是防火墙导致的问题。

示例代码

假设你有一个简单的 Node.js 应用程序,你想确保它绑定到一个正确的 IP 地址和端口上:

const http = require('http');

const hostname = '127.0.0.1';  // 替换为你想要绑定的正确 IP 地址
const port = 3000;  // 替换为你想要绑定的端口

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

总结

如果更改 IP 地址和端口后仍然遇到 EADDRNOTAVAIL 错误,建议从上面提到的几个方面逐一排查。确保 IP 地址有效、端口未被占用、具有相应的权限以及防火墙允许访问即可解决问题。

回到顶部