服务器作为linux服务启动时,readFileSync引发错误
我正在尝试使用运行在数字海洋上的节点/快递服务器为自己做一个简单的API。 在服务器文件中我有这样的东西:
var data = fs.readFileSync('path/to/data.json','utf8');
当我从cmd行手动启动服务器时,它工作得很好
node server
但是我设置的是一个linux服务,所以每次我重新启动我的数字海洋机器,它会自动启动服务器,服务(保存在etc / init /)看起来像这样:
start on filesystem and started networking respawn exec node /path/to/server.js
问题是,当我向运行readFileSync调用的服务器发出请求时,如果服务器已经从cmd行手动启动,但是通过服务启动服务器,那么readFileSync将引发以下错误:
Error: ENOENT, no such file or directory 'path/to/data.json' at Error (native) at Object.fs.openSync (fs.js:500:18) at Object.fs.readFileSync (fs.js:352:15)
该文件和目录确实存在(如果我在我的浏览器中直接请求data.json文件,我可以看到它)
我错过了什么? 有什么关于启动服务器作为与使用readFileSync冲突的服务? 有什么我想要做的替代方法? 我应该使用某种请求/获取资源模块来访问该json文件吗?
您正在使用相对path,但该stream程并未从您认为的位置开始。 而不是使用相对path,使用绝对path。
所以如果你的布局看起来像:
server.js path/ 至/ data.json
然后在你的server.js中,你可以做一些事情:
var path = require('path'); // ... var data = fs.readFileSync(path.join(__dirname, 'path/to/data.json'), 'utf8');