我试图使用在数字海洋上运行的节点/快速服务器为自己制作一个简单的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文件吗?答案 0 :(得分:1)
您正在使用相对路径,但该过程并非从您认为的位置开始。而不是使用相对路径,使用绝对路径。
因此,如果您的布局如下:
server.js path/ to/ data.json
然后在server.js中,您可以执行以下操作:
var path = require('path');
// ...
var data = fs.readFileSync(path.join(__dirname, 'path/to/data.json'), 'utf8');