如何在Node.js中中断管道请求并改为返回重定向?

问题描述 投票:0回答:1

我有一个端点充当我的另一个服务的代理,它实质上是通过管道传送GET请求,如下所示:

var options = {
        'uri': url,
        'headers': req.headers,
        'method': req.method,
        'time' : true
}

request(options, function(error, response, body){
        if (error){
                ...
        }
}).pipe(res);

我想做的是防止此代理应用程序跟随重定向并返回带有200状态代码的完整内容,而只是将完整重定向传递回初始请求。

我已经玩过类似的东西,但是它只是在管道已经返回200之后才执行该代码:

request(options, function(error, response, body){
        if (error){
                ...
        }
        if (response.statusCode == 302){
            res.redirect(302, response.headers.location);
        }
}).pipe(res);

有没有一种方法可以中断此管道过程,以便可以手动重新发送从此代理请求返回的重定向,同时允许非重定向照常继续进行?

node.js redirect proxy
1个回答
0
投票

基本上,您需要将可读流分配给变量,并在发出“响应”事件时暂停该流。然后,您可以执行重定向或继续传递响应。像这样的东西应该可以工作(因为我在移动设备上,所以现在无法测试):

const requestStream = request(options);
r.pause();
requestStream.on('response', (response) => {
    if(response.statusCode === 302) {
        // destroy the readable stream to prevent leaking
        requestStream.destroy();
        return res.redirect(302, ...)
    }
    requestStream.pipe(res);
    r.resume();
});
© www.soinside.com 2019 - 2024. All rights reserved.