Node.js v20权限模型报错:TypeError与ERR_ACCESS_DENIED问题求助
Node.js v20权限模型实验问题解决
问题原因分析
1. 未启用实验性权限模型时的错误
process.permission是Node.js实验性权限模型专属API,只有添加--experimental-permission启动参数时才会被注入到process对象中。直接运行node app.js时该对象不存在,因此抛出TypeError: Cannot read properties of undefined (reading 'has')错误。
2. 启用权限模型后的文件读取错误
启用--experimental-permission后,Node.js进入严格权限模式,默认拒绝所有文件系统操作,包括读取入口脚本app.js本身。这就是你看到ERR_ACCESS_DENIED错误的核心原因——Node.js无权限读取脚本文件,导致程序无法启动。
解决方案
要实现预期输出false,需要同时满足两个条件:
- 启用实验性权限模型
- 授予Node.js读取入口脚本的权限(保证程序能正常启动)
- 此时全局
fs.read权限未被授权,process.permission.has("fs.read")会返回false
正确运行命令
使用以下命令启动程序:
node --experimental-permission --allow-fs-read=/home/stanley/example-app/app.js app.js
扩展权限检查逻辑
如果需要验证对不同路径的权限,可以修改代码:
// app.js // 检查全局fs.read权限(无全局授权时返回false) console.log(process.permission.has("fs.read")); // 检查对当前脚本文件的读取权限(返回true) console.log(process.permission.has("fs.read", "/home/stanley/example-app/app.js")); // 检查对其他路径的读取权限(返回false) console.log(process.permission.has("fs.read", "/other/random/path"));
运行修改后的代码会输出:
false true false
内容的提问来源于stack exchange,提问作者Stanley Ulili
相关产品推荐
相关产品推荐

