在使用 hexo-browsersync插件时执行 hexo s 时提示如下错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
node:events:491
throw er; // Unhandled 'error' event
^

Error: listen EACCES: permission denied 0.0.0.0:3000
at Server.setupListenHandle [as _listen2] (node:net:1723:21)
at listenInCluster (node:net:1788:12)
at Server.listen (node:net:1876:7)
at module.exports.plugin (D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\server\index.js:27:25)
at Object.startServer [as fn] (D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\async.js:180:52)
at D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\browser-sync.js:121:14
at iterate (D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\utils.js:269:9)
at D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\utils.js:280:21
at executeTask (D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\browser-sync.js:137:13)
at Object.mergeMiddlewares [as fn] (D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\async.js:169:9)
at D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\browser-sync.js:121:14
at iterate (D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\utils.js:269:9)
at D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\utils.js:280:21
at executeTask (D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\browser-sync.js:137:13)
at Object.setFileWatchers [as fn] (D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\async.js:158:9)
at D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\browser-sync.js:121:14
at iterate (D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\utils.js:269:9)
at D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\utils.js:280:21
at executeTask (D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\browser-sync.js:137:13)
at Object.setInternalEvents [as fn] (D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\async.js:151:9)
at D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\browser-sync.js:121:14
at iterate (D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\utils.js:269:9)
at D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\utils.js:280:21
at executeTask (D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\browser-sync.js:137:13)
at Object.setOptions [as fn] (D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\async.js:134:9)
at D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\browser-sync.js:121:14
at iterate (D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\utils.js:269:9)
at D:\hexo\shiguang-coding\blog\node_modules\.store\browser-sync@2.29.3\node_modules\browser-sync\dist\utils.js:280:21
Emitted 'error' event on Server instance at:
at emitErrorNT (node:net:1767:8)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
code: 'EACCES',
errno: -4092,
syscall: 'listen',
address: '0.0.0.0',
port: 3000
}

检查端口号是否被占用 ,发现并没有被占用

1
netstat -ano|findstr 3000

如果端口被占用,可以使用以下命令结束进程

1
taskkill -PID <PID> -F

我注意到映射的IP并非 127.0.0.1,而是 0.0.0.0,可能是网络地址转换异常

使用管理员权限重启下winnat服务

1
2
3
4
5
# 停止winnat服务
net stop winnat

# 开启winnat服务
net start winnat

winnat 是 Windows 操作系统中的一个命令行工具,用于配置和管理 Windows 网络地址转换(NAT)功能。NAT 是一种网络技术,允许一个网络地址空间(通常是私有网络)中的设备通过一个或多个公共 IP 地址与外部网络(如互联网)进行通信。

以下是 winnat 命令的一些常见用法和功能:

  1. 创建 NAT 接口

    1
    winnat add filter <外部接口名称> <内部接口名称>

    这个命令用于将外部网络接口和内部网络接口关联起来,以便进行 NAT 转换。

  2. 删除 NAT 接口

    1
    winnat delete filter <外部接口名称> <内部接口名称>

    这个命令用于删除之前创建的 NAT 接口关联。

  3. 查看 NAT 配置

    1
    winnat show config

    这个命令用于显示当前的 NAT 配置信息,包括已配置的 NAT 接口和过滤规则。

  4. 添加 NAT 过滤规则

    1
    winnat add filter <外部接口名称> <内部接口名称> <协议> <源端口> <目标端口>

    这个命令用于添加特定的 NAT 过滤规则,以便在特定端口上进行数据包的转换。

  5. 删除 NAT 过滤规则

    1
    winnat delete filter <外部接口名称> <内部接口名称> <协议> <源端口> <目标端口>

    这个命令用于删除之前添加的 NAT 过滤规则。

winnat 工具通常用于网络管理员在 Windows 服务器上配置和管理 NAT 功能,以便实现内部网络与外部网络之间的通信。需要注意的是,使用这些命令通常需要管理员权限。

如果你有特定的需求或问题,可以提供更多详细信息,我可以提供更具体的帮助。

参考

解决vue在运行“npm run”命令时出现“Error: listen EACCES: permission denied 0.0.0.0:5173”的异常

node.js 报错解决办法 throw er; // Unhandled ‘error‘ event