Express readFile vor Response.

Zeppi

Aktives Mitglied
Moin, ich arbeite noch mit einem Node.js Server mit dem Framework Express. Wenn ich etwas verschicke app.post() wird mein response.send() vor dem fs.readFile() durchgeführt. Aber ich verstehe nicht recht wieso. Ich sehe das nämlich, wenn ich console.log(json) unter readFile und über response.send()schreibe, dort bekomme ich dann undefined. Wenn ich console.log(json) innerhalb readFile schreibe, bekomme ich eine undefined und dann mein json zurück in der Konsole (undefined kommt durch response.send() mir wird auch die Zeile davon angezeigt.
Wie kann ich es jetzt schaffen, dass mein response.send das json lesen kann, nachdem readFile durchgelaufen ist.
[CODE lang="java" title="Server"]app.post("/a", (request, response) => {
var json;
fs.readFile('input-json.json', (err, data) => {
if (err) throw err;
json = JSON.parse(data);
console.log(json)
});

response.send(json)
}[/CODE]
 
readFile blockiert nicht den Programmfluss, das Programm wird einfach fortgesetzt. Du könnest es mit readFileSync versuchen. Am elegantesten wäre, bei dem sichtbaren Code, die Verwendung von Streams.
 
readFile blockiert nicht den Programmfluss, das Programm wird einfach fortgesetzt. Du könnest es mit readFileSync versuchen.
readFileSync bringt bei mir keinen Unterschied, weiterhin bekomme ich undefined.
Am elegantesten wäre, bei dem sichtbaren Code, die Verwendung von Streams.
Ich muss mir dann wohl erstmal angucken, was Streams sind. Habe davon noch nichts gehört.
 
Ich würde es mal so versuchen. Leider kann ich es gerade nicht selbst testen.
Javascript:
app.get('/download', function(req, res) {
  const file = `${__dirname}/.../input-json.json`;
  res.download(file); // Set disposition and send it.
});
 
res.download stellt eine Datei zum Download bereit, das ist vermutlich nicht ganz das, was du möchtest.

readFileSync bringt bei mir keinen Unterschied, weiterhin bekomme ich undefined.
An welcher Stelle bekommst ist was undefined? readFileSync kann afaik nicht undefined zurückgeben, und was anderes hast du da ja nicht...
 
res.download stellt eine Datei zum Download bereit, das ist vermutlich nicht ganz das, was du möchtest.
Das stimmt.
An welcher Stelle bekommst ist was undefined? readFileSync kann afaik nicht undefined zurückgeben, und was anderes hast du da ja nicht...
Wenn ich readFile ohne sync versuche und console.log in den geschweiften Klammern von readFile, bekomme ich mein richtiges json aus dem Ablauf von readFile zurück. Wenn ich console.log nach den geschweiften Klammern von readFile und vor response.send habe, bekomme ich undefined.
Bei readFileSync bekomme ich gar nichts zurück, wenn console.log in den geschweiften Klammern steht. Bei außerhalb und vor response.send bekomme ich undefined.
 
readFile und readFileSync haben eine unterschiedliche Syntax. Das hat nichts mit Klammern zu tun.
Javascript:
const fs = require('fs')
try {
  const data = fs.readFileSync('/.../.../input-json.json', 'utf8')
  console.log(data)
} catch (err) {
  console.error(err)
}
Ein Blick in die Doku könnte da helfen.
 

Zurück
Oben