当服务器作为linux服务启动时,readFileSync抛出错误

时间:2016-09-02 23:37:34

标签: node.js linux express service

我试图使用在数字海洋上运行的节点/快速服务器为自己制作一个简单的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文件吗?

1 个答案:

答案 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');