Node.js 上的 Lowdb 因权限错误而失败

Posted

技术标签:

【中文标题】Node.js 上的 Lowdb 因权限错误而失败【英文标题】:Lowdb on Node.js failing with permissions error 【发布时间】:2018-09-08 23:59:51 【问题描述】:

我正在尝试实现用于 node.js 的 lowdb NPM 包,但我遇到了权限错误。我已经尝试了位于https://github.com/typicode/lowdb/tree/master/examples 的自述文件中列出的所有示例,但都返回了相同的错误。

为方便起见,这是我尝试从节点 CLI 运行的特定代码:

const low = require('lowdb')
const FileSync = require('lowdb/adapters/FileSync')

const adapter = new FileSync('db.json')
const db = low(adapter)

db.defaults( posts: [] )
  .write()

const result = db.get('posts')
  .push( name: process.argv[2] )
  .write()

console.log(result)

我正在执行这个命令:

$ node cli.js hello

这应该是结果:

# [  title: 'hello'  ]

相反,我收到此错误:

[server]$ node cli.js hello
fs.js:549
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^

Error: EACCES: permission denied, open 'db.json'
    at Error (native)
    at Object.fs.openSync (fs.js:549:18)
    at fs.writeFileSync (fs.js:1156:15)
    at FileSync.read (/home/nodeadmin/datadir/estimup/node_modules/lowdb/adapters/FileSync.js:46:9)
    at LodashWrapper.db.read (/home/nodeadmin/datadir/estimup/node_modules/lowdb/lib/main.js:32:21)
    at module.exports (/home/nodeadmin/datadir/estimup/node_modules/lowdb/lib/main.js:51:13)
    at Object.<anonymous> (/home/nodeadmin/datadir/estimup/cli.js:5:12)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)
    at Module.load (module.js:356:32)

我曾尝试提前手动创建db.json 文件并授予它chmod 644 权限,但仍然无济于事。

【问题讨论】:

【参考方案1】:

我找到了一个可行的解决方案,虽然并不完美,但我将分享以帮助那些可能只是出于开发原因需要它工作的人。

根本问题是节点需要创建/修改文件的权限。完成这项工作的简单方法是:$ sudo node cli.js

我希望 nodemon 运行 cli.js。问题是我在尝试$ sudo nodemon cli.js 时收到命令未找到错误。这是因为我的 nodemon 安装存在一个单独的问题,我还没有弄清楚。

在此堆栈的答案中找到了对我有用的解决方法:nodemon not found in npm

具体来说,在 package.json 中添加以下内容:

"scripts": 
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon cli.js"

然后$ sudo npm start

现在 nodemon 正在以提升的权限运行我的应用程序,我可以继续我的项目。

【讨论】:

以上是关于Node.js 上的 Lowdb 因权限错误而失败的主要内容,如果未能解决你的问题,请参考以下文章

M1(Apple Silicon)上的 CocoaPods 因 ffi 架构错误而失败

VSTS构建代理程序因获取源而失败:权限被拒绝

Vertex AI 模型批量预测因内部错误而失败

scp 因“协议错误:文件名与请求不匹配”而失败

与 RDS MySQL/Aurora 无服务器集群的 SSL 连接因 Node.js 失败

Facebook Oauth 授权重定向在 Internet Explorer 中因扩展权限而失败