我正在尝试实现lowdb NPM包以与node.js一起使用,但我遇到了权限错误。我已经尝试了位于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
权限,但仍无济于事。
答案 0 :(得分:0)
我找到了一个有效的解决方案,虽然不完美,但我会分享帮助那些可能因为开发原因而需要它的人。
根本问题是节点需要创建/修改文件的权限。一个简单的方法就是:$ 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正在以提升的权限运行我的应用程序,我可以继续我的项目。