reakcja węzła-nadciśnieniaType('blob') vs. buffer(true)

głosy
0

W związku z deprecjacją żądania, obecnie przepisujemy usługę request-service w naszej aplikacji węzłowej z superagentem. Na razie wszystko wygląda dobrze, jednak nie jesteśmy do końca pewni, w jaki sposób żądać danych binarnych/oktet-streamu i przetworzyć rzeczywisty organ odpowiedzi jakoBuffer. Według docs (po stronie klienta) należy użyć

superAgentRequest.responseType('blob');

która zdaje się dobrze działać w NodeJS, ale znalazłem też ten problem z githubami, gdzie używają

superAgentRequest.buffer(true);

która działa tak samo dobrze. Zastanawiam się więc, jaka jest preferowana metoda żądania danych binarnych w NodeJS?

Utwórz 22/05/2020 o 16:51
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
0

Zgodnie z dokumentacją https://visionmedia.github.io/superagent/

SuperAgent przetworzy dla Ciebie znane dane response-body, obecnie wspierające application/x-www-form-urlencoded, application/json, oraz multipart/form-data. Możesz ustawić automatyczne parsowanie również dla innych danych ciała odpowiedzi:

Możesz ustawić własny parser (który ma pierwszeństwo przed wbudowanymi parserami) za pomocą metody .buffer(true).parse(fn). Jeśli bufor odpowiedzi nie jest włączony (.buffer(false)), to zdarzenie odpowiedzi zostanie wyemitowane bez oczekiwania na zakończenie parsera ciała, więc response.body nie będzie dostępne.

Więc aby przetworzyć inne typy odpowiedzi, będziesz musiał ustawić .buffer(true).parse(fn). Ale jeśli nie chcesz parsować odpowiedzi, nie musisz ustawiać buffer(true).

Odpowiedział 30/05/2020 o 00:35
źródło użytkownik

głosy
0

Zgodnie z kodem źródłowym superagenta, responseTypeustawienie bufferflagi jest prawdziwe, tzn. takie samo jak ustawienie ręczne na true.

W przypadku zajmowania się danymi binarnymi/oktet-streamami, używany jest parser danych binarnych, który w rzeczywistości jest tylko zwykłym buforem:

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));
  });
};

W obu przypadkach stosowany jest ten parser, który wyjaśnia zachowanie. Tak naprawdę nie ma znaczenia, czego używasz do obsługi danych binarnych/oktet-streamów.

Odpowiedział 03/06/2020 o 15:59
źródło użytkownik

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