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]
 

Oneixee5

Top Contributor
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.
 

Zeppi

Aktives Mitglied
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.
 

Oneixee5

Top Contributor
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.
});
 

mrBrown

Super-Moderator
Mitarbeiter
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...
 

Zeppi

Aktives Mitglied
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.
 

Oneixee5

Top Contributor
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.
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben