使用gaxios(或axios)发送请求

时间:2020-03-04 18:11:55

标签: javascript node.js axios node-streams

目前,我正在执行将请求req传递到目标URL,并将响应传递回res的技巧,就像这样:

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

由于request已被正式弃用(boo hoo),使用gaxios library完全可以实现此技巧吗?我以为在请求上设置responseType: 'stream'会执行与上面类似的操作,但是似乎不起作用。

类似地,可以在以下情况下使用gaxios:

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

3 个答案:

答案 0 :(得分:1)

我想如果您提供stream作为res.data并使用const {request} = require("gaxios"); const fs = require("fs"); const {createGzip} = require("zlib"); const gzip = createGzip(); (async () => { const res = await request({ "url": "https://www.googleapis.com/discovery/v1/apis/", "responseType": "stream" }); const fileStream = fs.createWriteStream("./input.json.gz"); res.data.pipe(gzip).pipe(fileStream); })(); ,您将获得可以像这样通过管道传输的流

react-responsive

答案 1 :(得分:1)

安装gaxios:

npm install gaxios

然后使用指定了 Readable 类型且 responseType 设置为'stream'的请求。

// script.ts

import { request } from 'gaxios';

(await(request<Readable>({
  url: 'https://some.data.com',
  responseType: 'stream'
}))
.data)
.on('error', function(err) {
    console.log(err);
})
.pipe(unzipper.Parse())
.on('entry', myEntryHandlerFunction);
// first-example.ts

import { request } from 'gaxios';

// pipe req to destination...
const readableA = (await request<Readable>({
  url: 'http://some.url.com',
  method: 'POST',
  data: req, // suppose `req` is a readable stream
  responseType: 'stream'
})).data;
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
});

Gaxios是一个稳定的工具,已在官方Google API客户端库中使用。它基于稳定的节点获取。它附带了TypeScript定义。我从弃用的请求和普通的节点获取库切换到了它。

答案 2 :(得分:0)

看起来您正在尝试基本上将请求从您的快递服务器转发到客户端。这对我有用。

date

我认为,来自A的更复杂的响应将需要在如何传递它方面进行更多的细化。但是您可能可以直接与time的响应对象进行交互并设置适当的字段。