2017-05-03 6 views
0

Ich arbeite derzeit an einer ExpressJS-App, die eine YAML-Datei nach JSON liest und dann den JSON an das Frontend sendet, um von Angular verwendet zu werden.Node.js fs ENOENT Fehler

Hier ist die Dateistruktur für das Projekt

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

In ./routes/ ich das, was für eine Überraschung meine index.js-Datei haben, meine Routen enthält. Und hier ist die Route, die ich die yml Datei zuzugreifen bin mit:

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); 
    } 

    }); 

Aus irgendeinem Grund, nachdem der Server hochgefahren und Schlagen der/api/assets Route, bekomme ich folgende Fehlermeldung:

{ 
    "name": "Error", 
    "message": "ENOENT: no such file or directory, open 'tenant-assets.yml'" 
} 

Ich habe ein paar Dinge ausprobiert, um es zum Laufen zu bringen, wie den Dateinamen auf ./data/file.yml und zu ändern, denkend, dass es sie vom Eintrag index.js anruft. Also bin ich irgendwie festgefahren und weiß nicht, was vor sich geht.

Antwort

0

Ich erkannte, dass ich den Server aus dem eigentlichen Root-Verzeichnis der App drehte. Um es zu beheben, musste ich den Pfad zu der Datei zu ./server/data/file.yml ändern.

1

Um einen relativen Pfad von der aktuellen Datei zu verwenden, empfehlen wir die Verwendung von path.join() und __dirname.

In Ihrem Fall:

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

Das tat es! Vielen Dank. – CMckinstry