Inviare file e stream al client
$.file(path, [download]) invia un file dal disco. Il content-type deriva dall'estensione. Passa true come secondo argomento perché il browser scarichi il file con il suo nome, oppure una stringa per scegliere il nome (attachment; filename*=... viene impostato per te, sicuro con UTF-8). Un percorso che non esiste termina con la pagina 404.
$.stream(type, stream, [download]) invia qualsiasi stream leggibile con il content type indicato: un file generato, la risposta di un altro server o un'esportazione di database. Non imposta la lunghezza, quindi la risposta viene inviata a blocchi. PATH.public(), PATH.private() e PATH.tmp() costruiscono percorsi assoluti verso le cartelle del progetto; i file in public/ sono già serviti senza alcuna rotta, quindi usa $.file() per i file che devono restare privati o richiedono prima un controllo.
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'));
}