目前,我正在执行将请求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);
答案 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
的响应对象进行交互并设置适当的字段。