错误:监听 EACCES:权限被拒绝 0.0.0.0:3001

Suj*_*ari 14 windows networking node.js

我在这里查看了很多答案,但没有一个解决了我的错误。这是我到目前为止所尝试过的。

环境:

win 10 pro v2004 build 19041.29

node v12.14.1
Run Code Online (Sandbox Code Playgroud)
  1. 用于netstat -a -b查看此端口是否正在被任何其他进程使用。没有进程正在使用此端口,也尝试切换端口以3000得到相同的错误。

  2. 我使用docker-desktop和wsl2,所以也一一禁用了所有虚拟网络适配器。杀死所有其他 docker 服务后尝试。

  3. 重新启动了我的电脑。

  4. npm start尝试以管理员身份通过 powershell运行

服务器.js

const app = require('./src/app');

const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`Litening on port ${port}...`);
});
Run Code Online (Sandbox Code Playgroud)

错误:

events.js:200
      throw er; // Unhandled 'error' event
      ^

Error: listen EACCES: permission denied 0.0.0.0:3001
    at Server.setupListenHandle [as _listen2] (net.js:1289:21)
    at listenInCluster (net.js:1354:12)
    at Server.listen (net.js:1442:7)
    at Function.listen (C:\Users\sujeet\project\node_modules\express\lib\application.js:618:24)
    at Object.<anonymous> (C:\Users\sujee\CustomerAPIs\server.js:4:5)
    at Module._compile (internal/modules/cjs/loader.js:955:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
    at Module.load (internal/modules/cjs/loader.js:811:32)
    at Function.Module._load (internal/modules/cjs/loader.js:723:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
    at internal/main/run_main_module.js:17:11
Emitted 'error' event on Server instance at:
    at emitErrorNT (net.js:1333:8)
    at processTicksAndRejections (internal/process/task_queues.js:81:21) {
  code: 'EACCES',
  errno: 'EACCES',
  syscall: 'listen',
  address: '0.0.0.0',
  port: 3001
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*uri 37

对于在尝试将 Node.js 服务器绑定到特定端口时遇到“EACCES:权限被拒绝”错误的 Windows 用户,请按照以下步骤操作:

  1. 以管理员身份运行 PowerShell:确保系统级命令的提升权限。

  2. 停止“winnat”服务:

net stop winnat
Run Code Online (Sandbox Code Playgroud)

这会停止 Windows 网络地址转换 (NAT) 服务,该服务负责动态地将私有 IP 地址转换为公共 IP 地址,这对于互联网连接至关重要。

  1. 重新启动“winnat”服务:
net start winnat
Run Code Online (Sandbox Code Playgroud)

此命令恢复winnat服务,重新建立 NAT 功能。

技术说明:

  • 端口绑定和权限: “EACCES”错误是由于尝试将 Node.js 服务器绑定到特定 IP 地址和端口时权限不足而引起的。以管理员身份运行 PowerShell 会授予此操作所需的权限。

  • Windows NAT 服务(“winnat”): “winnat”是负责网络地址转换的关键服务。在服务器端口绑定期间,可能会发生冲突,因为“winnat”动态管理私有 IP 地址到公共 IP 地址的转换,从而影响绑定过程。

  • 动态服务交互: 暂时停止“winnat”会动态修改 NAT 服务的状态。这是创建一个临时窗口的战略措施,在此期间 Node.js 服务器可以绑定到端口,而不会与 NAT 服务争用。

  • 临时网络调整: 命令net stop winnat指示Windows暂时停止NAT服务。这种暂停是一种战术策略,旨在为 Node.js 服务器提供短暂的机会来绑定到端口,而不会遇到权限问题。

  • Node.js 服务器绑定尝试: 在“winnat”暂时停止的情况下,Node.js 服务器可以成功绑定到所需的端口。此步骤对于确保服务器能够发起并建立连接而不会因权限不足而被拒绝至关重要。

  • 网络状态恢复: 后续命令 net start winnat 重新启动“winnat”服务,恢复正常的网络功能。这可确保恢复对服务器绑定过程所做的任何临时调整,从而防止对其他依赖网络的过程造成潜在的干扰。

这一系列命令经过精心设计,旨在解决 Windows 服务的复杂性,特别是解决在将 Node.js 服务器绑定到端口的过程中“winnat”服务带来的挑战。