2017-05-03 19 views
0

私は現在、jsonにyamlファイルを読み込んで、jsonをフロントエンドに送信してAngularによって使用されるExpressJSアプリケーションを開発中です。ここでNode.js fs ENOENTエラー

は、私は私のルートが含まれている、驚き驚き、私のindex.jsファイルを持っている./routes/

server/ 
├── data/ 
│   └── file.yml 
├── index.js 
└── routes/ 
    └── index.js 

プロジェクトのファイル構造です。何らかの理由で

app.get('/api/assets', (req,res) => { 

    try { 
     let doc = yaml.safeLoad(fs.readFileSync('../data/file.yml', 'utf8')); 
     // console.log(doc); 
     res.json(doc); 
    } catch (err) { 
     let doc = { 
     "name": err.name, 
     "reason": err.reason, 
     "message": err.message 
     } 
     res.json(doc); 
    } 

    }); 

、サーバーのスピンアップおよび/ API /資産ルートを打った後、私は次のエラーを取得する:

{ 
    "name": "Error", 
    "message": "ENOENT: no such file or directory, open 'tenant-assets.yml'" 
} 
そして、ここで私は ymlファイルにアクセスするために使用していますルートがあります

ファイル名を./data/file.ymldata/file.ymlに変更するなど、いくつかのことを試してみましたが、それはエントリindex.jsからファイル名を呼び出すと考えていました。だから、私はこだわっていて、何が起こっているのか分からない。

答えて

0

私は、アプリケーションのルートディレクトリであるサーバーからスピンアップしていることに気付きました。これを修正するには、ファイルへのパスを./server/data/file.ymlに変更する必要がありました。

1

現在のファイルからの相対パスを使用するには、path.join()__dirnameを使用することをお勧めします。あなたのケースでは

const path = require('path'); 

app.get('/api/assets', (req, res) => { 
    try { 
     let doc = yaml.safeLoad(fs.readFileSync(path.join(__dirname, '../data/file.yml'), 'utf8')); 
     // console.log(doc); 
     res.json(doc); 
    } catch (err) { 
     let doc = { 
      "name": err.name, 
      "reason": err.reason, 
      "message": err.message 
     } 
     res.json(doc); 
    } 
}); 
+0

それをやりました!ありがとう。 – CMckinstry

関連する問題