risposta dei nodi-superagentiType('blob') vs. buffer(true)

voti
0

A causa dell'ammortamento della richiesta, attualmente stiamo riscrivendo il servizio di richiesta nella nostra app del nodo con il superagente. Finora tutto sembra a posto, tuttavia non siamo del tutto sicuri di come richiedere i dati binari/octet-stream e di elaborare l'effettivo corpo di risposta come un Buffer. Secondo i docs (dal lato del cliente) si dovrebbe usare

superAgentRequest.responseType('blob');

che sembra funzionare bene su NodeJS, ma ho anche trovato questo problema github dove usano

superAgentRequest.buffer(true);

che funziona altrettanto bene. Quindi mi chiedo quale sia il metodo preferito per richiedere dati binari in NodeJS?

È pubblicato 22/05/2020 alle 16:51
fonte dall'utente
In altre lingue...                            


2 risposte

voti
0

Come da documentazione https://visionmedia.github.io/superagent/

SuperAgent analizzerà per voi i dati del corpo di risposta noti, attualmente supportando application/x-wwww-form-urlencoded, application/json, e multipart/form-data. È possibile impostare l'analisi automatica anche per altri dati del corpo di risposta:

Si può impostare un parser personalizzato (che ha la precedenza sui parser incorporati) con il metodo .buffer(true).parse(fn). Se il buffering della risposta non è abilitato (.buffer(false)), allora l'evento di risposta sarà emesso senza aspettare che il parser del corpo finisca, quindi response.body non sarà disponibile.

Quindi, per analizzare altri tipi di risposta, sarà necessario impostare .buffer(true).parse(fn). Ma se non si vuole analizzare la risposta, allora non è necessario impostare buffer(true).

Risposto il 30/05/2020 a 00:35
fonte dall'utente

voti
0

Secondo il codice sorgente del superagente, impostare il responseTypebufferflag su true, vale a dire lo stesso che impostare manualmente su true.

Nel caso in cui si tratti di dati binari o di flussi di ottetti, si usa un parser di dati binari, che in realtà è solo un semplice buffer:

module.exports = (res, fn) => {
  const data = []; // Binary data needs binary storage

  res.on('data', chunk => {
    data.push(chunk);
  });
  res.on('end', () => {
    fn(null, Buffer.concat(data));
  });
};

In entrambi i casi viene utilizzato questo parser, il che spiega il comportamento. Quindi non importa davvero cosa si usa per trattare i dati binari o i flussi di ottetti.

Risposto il 03/06/2020 a 15:59
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more