Dateien und Streams an den Client senden
$.file(path, [download]) sendet eine Datei von der Festplatte. Der content-type ergibt sich aus der Endung. Übergib true als zweites Argument, damit der Browser die Datei unter ihrem eigenen Namen herunterlädt, oder eine Zeichenkette, um den Namen zu wählen (attachment; filename*=... wird für dich gesetzt, UTF-8-sicher). Ein Pfad, der nicht existiert, endet mit der 404-Seite.
$.stream(type, stream, [download]) sendet jeden lesbaren Stream mit dem angegebenen Content-Type: eine erzeugte Datei, die Antwort eines anderen Servers oder einen Datenbankexport. Es setzt keine Länge, die Antwort wird also in Chunks übertragen. PATH.public(), PATH.private() und PATH.tmp() bilden absolute Pfade in die Projektordner; Dateien in public/ werden ohnehin ohne jede Route ausgeliefert, verwende $.file() also für Dateien, die privat bleiben oder zuvor geprüft werden müssen.
const Fs = require('fs');
exports.install = function() {
ROUTE('GET /report/', report);
ROUTE('GET /report/save/', report_save);
ROUTE('GET /export/', export_csv);
ROUTE('GET /missing/', missing);
};
function filepath() {
var filename = PATH.tmp('report.txt');
Fs.writeFileSync(filename, 'Total.js report\n');
return filename;
}
function report($) {
$.file(filepath());
}
function report_save($) {
$.file(filepath(), 'my report.txt');
}
function export_csv($) {
var stream = Fs.createReadStream(filepath());
$.stream('text/csv', stream, 'export.csv');
}
function missing($) {
$.file(PATH.tmp('does-not-exist.txt'));
}