2016-09-02 8 views
1

私はデジタル海洋で動作するノード/エクスプレスサーバを使用して自分用の単純なAPIを作成しようとしています。しかし、私はセットアップを持ってしても、そのたびので、LinuxのサービスがサーバがLinuxサービスとして起動したときにreadFileSyncがエラーを起こします

私はCMDライン

node server 

から手動でサーバーを起動したときに完全に正常に動作

var data = fs.readFileSync('path/to/data.json','utf8'); 

です:サーバーのファイルに私はこのような何かを持っています私は私のデジタル海のマシンを再起動し、それが自動的にサーバを起動します、(ETC/initを/に保管)サービスは、次のようになります。

start on filesystem and started networking 
respawn 
exec node /path/to/server.js 

問題は、私が要求を行うときということですサーバーは、CMDラインから手動で起動されていた場合は正常に動作しますが、サーバーがサービスを経由して起動されたときにreadFileSyncは、次のエラーをスロー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

あなたは相対パスを使用していますが、プロセスはあなたが思うところから開始されていません。相対パスを使用する代わりに、絶対パスを使用します。

あなたのレイアウトがどのように見えるのであれば:それをやった

var path = require('path'); 

// ... 

var data = fs.readFileSync(path.join(__dirname, 'path/to/data.json'), 'utf8'); 
+0

 server.js path/ to/ data.json 

その後、あなたserver.jsの内側に、あなただけのような何かを行うことができます!本当にありがとう :) – Nick

関連する問題