Vraag Hoe kan ik een http-antwoord bufferen met behulp van de verzoekmodule?


Ik zou een inkomende http-reactie, die een stroom is, omzetten en de gegevens in een variabele opslaan. Ik doe niet veel met knooppuntstreams en ik heb moeite om dit goed te doen.

var request = require('request');

request('http://google.com/doodle.png', function (error, response, body) {

     // buffer the stream response to and a string variable.   
})

BIJWERKEN

Dit is mijn volledige code. Mijn doel is om de afbeelding op verzoek te krijgen en op te slaan in mongodb. Maar het beeld is altijd beschadigd. Ik dacht dat request-reactie een stream was, het beeld was slechts gedeeltelijk bewaard en vandaar de corruptie.

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.

    });

})

Nu dat je die verzoekbuffer hebt opgehelderd, is de reactie enig idee over hoe ik de afbeelding correct kan opslaan zonder een corruptie.


18
2018-01-03 19:12


oorsprong


antwoorden:


De verzoekmodule buffert de reactie voor u. In de callback, body  is een string (of Buffer).

U krijgt alleen een stream terug van het verzoek als u geen terugbelopdracht verstrekt; request()  komt terug een Stream.

Raadpleeg de documentatie voor meer informatie en voorbeelden.


aanvraag gaat ervan uit dat het antwoord tekst is, dus probeert het de antwoordtekst om te zetten in een sring (ongeacht het MIME-type). Hierdoor worden binaire gegevens beschadigd. Als u de onbewerkte bytes wilt ophalen, geeft u a op null  encoding.

request({url:'http://google.com/doodle.png', encoding:null}, function (error, response, body) {
    db.images.insert({ filename: 'google.png', imgData: body}, function (err) {

        // handle errors etc.

    }); 
});

34
2018-01-03 19:33



var options = {
    headers: {
        'Content-Length': contentLength,
        'Content-Type': 'application/octet-stream'
    },
    url: 'http://localhost:3000/lottery/lt',
    body: formData,
    encoding: null, // make response body to Buffer.
    method: 'POST'
};

zet codering op nul, stuur Buffer terug.


2
2017-12-07 03:22



Heb je dit geprobeerd ?:

request.get('http://google.com/doodle.png').pipe(request.put('{your mongo path}'))

(Hoewel Mongo niet bekend genoeg is om te weten of het rechtstreekse invoegingen van binaire gegevens op deze manier ondersteunt, weet ik CouchDB en Riak.)


0
2018-01-03 20:15