web-dev-qa-db-fra.com

Demandes de tuyauterie utilisant Gaxios (ou Axios)

À l'heure actuelle, j'effectue l'astuce de la tuyauterie une requête req à une URL de destination et de la tuyauterie de la réponse à res, comme:

const request = require('request');

const url = 'http://some.url.com' + req.originalUrl;
const destination = request(url);

// pipe req to destination...
const readableA = req.pipe(destination);
readableA.on('end', function () {
    // do optional stuff on end
});

// pipe response to res...
const readableB = readableA.pipe(res);
readableB.on('end', function () {
    // do optional stuff on end
});

Puisque request est maintenant officiellement obsolète (BOO HOO), est-ce que cette astuce est possible à l'aide de la bibliothèque gaxios ? Je pensais que le réglage responseType: 'stream' Sur la demande ferait quelque chose de similaire que ci-dessus, mais cela ne semble pas fonctionner.

De même, les gaxios peuvent être utilisés dans le contexte suivant:

request
.get('https://some.data.com')
.on('error', function(err) {
    console.log(err);
})
.pipe(unzipper.Parse())
.on('entry', myEntryHandlerFunction);
12
drmrbrewer

On dirait que vous essayez de transférer essentiellement des demandes de votre serveur Express aux clients. Cela a fonctionné pour moi.

import { request } from "gaxios";
const express = require("express");
const app = express();
const port = 3000;

app.get("/", async (req: any, res: any) => {
  const readableA = (await request({
    url: "https://google.com",
    responseType: "stream",
  })) as any;
  console.log(req, readableA.data);

  const readableB = await readableA.data.pipe(res);
  console.log(res, readableB);
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});

J'imagine que des réponses plus complexes d'une volonté nécessitent plus de nuance dans la façon de la faire pipi. Mais vous pouvez probablement simplement interagir avec express 's objet d'objet directement et définir les champs appropriés.

0
Ringil