Node.js + Wunsch - speichern Sie eine remote-Datei-und servieren es in einer Antwort
Verstehe ich, wie laden Sie eine remote-Datei mit Node.js + Anfrage, und ich kann dann Lesen und wieder das png-binary-blob. Gibt es einen eleganten Weg, es zu tun mit einer Anfrage (oder auch nur einen one-liner)
etwas wie:
http.createServer(function(req, res) {
res.writeHead(200, {
'Content-Type': 'image/png'
});
var picWrite = fs.createWriteStream(local);
var picFetch = fs.createReadStream(local);
picStream.on('close', function() {
console.log("file loaded");
});
request(remote).pipe(picWrite).pipe(picFetch).pipe(res);
})
Klar sein: mein Ziel ist es, laden Sie eine remote-Datei von einem CDN, cache lokal auf den server und dann wieder die Datei in der ursprünglichen Anfrage. In Zukunft Wünsche ich verwenden fs.exists()
zu prüfen, es existiert zuerst.
Dies ist meine bisher beste Rolle:
http.createServer(function(req, res) {
var file = fs.createWriteStream(local);
request.get(remote).pipe(file).on('close', function() {
res.end(fs.readFileSync(local), 'binary');
});
})
- ja, genau das.
- jede http-Anfrage - ich brauche es zum Aufbau eines lokalen cache aus einer remote-Quelle.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da die Anforderung gibt eine lesbare stream, wir hören auf seine
data
undend
Veranstaltungen zu schreiben, um sowohl die HTTP-Antwort und einem schreibbaren stream.Die Methode, die Sie zeigten zunächst, schreibt die Daten auf die Festplatte, dann liest Sie in den Speicher erneut. Dies ist eher sinnlos, da die Daten schon zugänglich, wenn es auf die Festplatte geschrieben.
Wenn Sie verwenden einen Ereignis-handler, können Sie schreiben, um sowohl die HTTP-Antwort und die Datei streamen, ohne sinnlos laden Sie die Datei in den Speicher erneut. Das löst auch das problem mit der
pipe()
, weilpipe()
konsumieren werden die Daten aus den lesbaren Datenstrom, und kann nur einmal durchgeführt werden.Diese löst auch die Probleme mit der Speicher ausgeht, weil wenn Sie downloaden eine große Datei, dann würde es effektiv führen Sie Ihre Node.js Prozess aus dem Speicher. Mit streams, nur Stücke einer Datei in den Speicher geladen werden zu einer Zeit, so dass Sie don ' T haben dieses problem.