Comment tampon d'une réponse HTTP à l'aide de la demande de module?
Je voudrais diffuser le contenu d'une réponse HTTP à une variable. Mon but est d'obtenir une image via request()
, et de le stocker dans MongoDB - mais l'image est toujours corrompu.
C'est mon code:
request('http://google.com/doodle.png', function (error, response, body) {
image = new Buffer(body, 'binary');
db.images.insert({ filename: 'google.png', imgData: image}, function (err) {
//handle errors etc.
});
})
Quelle est la meilleure façon d'utiliser de la mémoire Tampon/flux dans ce cas?
Vous devez vous connecter pour publier un commentaire.
La demande module de tampons de la réponse pour vous. Dans le rappel,
body
est une chaîne de caractères (ouTampon
).Vous obtenez seulement un flux de demande si vous ne fournissez pas un rappel;
request()
retourne unStream
.Voir la documentation pour plus de détails et d'exemples.
demande suppose que la réponse est du texte, donc il essaie de convertir le corps de la réponse dans un sring (quel que soit le type MIME). Cette corrompre des données binaires. Si vous voulez obtenir les octets brutes, spécifiez un
null
encoding
.définir le codage de la valeur null, Tampon de retour.
Avez-vous essayé de tuyauterie ce?:
(Mais pas assez familiers avec Mongo pour savoir si elle prend en charge directe des insertions des données binaires comme ça, je sais que CouchDB et Riak faire).
Aujourd'hui, vous pouvez facilement récupérer un fichier en binaire avec le Nœud 8, RequestJS et async vous attendent. J'ai utilisé les éléments suivants:
La réponse a été un Tampon contenant les octets du fichier pdf. Beaucoup plus propre que le grand option, les objets et les old skool rappels.