node.js - 当 'selfHandleResponse' 为真时,如何传递代理响应?

标签 node.js express request node-http-proxy http-proxy-middleware

我正在运行一个开发代理服务器,在启动时我会使用我们的集群架构请求一个授权 token 。

但是,此 token 会在一段时间后过期。然后,我不想让开发人员重新启动他们的代理服务器,而是想发出另一个请求以获取另一个有效的身份验证 token 。为了能够自己处理响应,我将 node-http-proxy 选项 selfHandleResponse 设置为 true。

app.use(
  '/',
  index({
    target: config.hostname,
    changeOrigin: true,
    onProxyReq,
    onProxyRes,
    selfHandleResponse: true
  })
);

现在,我只想处理带有 401 的响应,因为这是我唯一需要请求另一个 token 的情况。

const onProxyRes = (proxyRes, req, res) => {
  if (proxyRes.statusCode === 401) {
    getToken()
      .then(forwardRequest(req))
      .then((response) => {
        res.send(response.body);
      })
      .catch(() => {        
        res.sendStatus(500);
      });
  }

  // How to pass back the original proxyRes including body, headers etc.?
});

编辑:forwardRequest 是我的函数,用于重试原始请求,然后在成功时将其交还给客户端。

我的麻烦从这里开始,因为我不知道如何将代理的非 401 请求传递回客户端。我发现自己开始根据 header 内容类型实现正文解析逻辑,但我非常希望有更简单的方法。

有什么想法吗?

最佳答案

解决方法很简单……

proxyRes.pipe(res);

node-http-proxy的源码中找到。

关于node.js - 当 'selfHandleResponse' 为真时,如何传递代理响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55612745/

相关文章:

javascript - 在 Angular 加载后加载 Jade 并解析所有变量

javascript - 如何使用 Node 请求发送不记名 token 和 x-www-form-urlencoded 数据

grails - 如何在将每个新请求提交给 grails 中的 Controller 之前执行函数

node.js - 使用累加器在 while 循环内向 API 发出请求

javascript - JavaScript 中需要解释 : Different outputs when used for. ..in 和 for(;;)

node.js - Babel 不会忽略 node_modules 目录,尽管它在 "ignore"配置中

javascript - JS 错误为 : var is not defined. 我如何发送函数值

javascript - express.js 中的常用函数放在哪里?

node.js - npm 错误!版本未找到 : i@0. 3.2 错误

node.js - 防止自动重定向并获取 PassportJs "authenticate"方法的重定向 URL