节点 HTTP 代理:根据响应尝试不同的端点

Node HTTP Proxy: Trying a different endpoint based on response

简而言之,我们正在使用 https://github.com/chimurai/http-proxy-middleware 如果初始代理端点 returns 是 404 或 500,我们希望将请求引导到不同的端点。

-> http://www.example.com (404)

-> http://www.backup.com (200)

所以客户端收到来自www.backup.com的响应。

经过一些调查,我发现使用 http-proxy-middleware 无法将 HTTP 请求引导到另一个端点。

http-proxy-middleware 由 node-http-proxy 提供支持,无法在 node-http-proxy 中实现要求。相关代码如下:

// node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js
proxyReq.on('response', function(proxyRes) {
  if(server) { server.emit('proxyRes', proxyRes, req, res); }
  ...
  proxyRes.pipe(res);
});

收到响应后,将发出一个事件 proxyRes,该响应会立即通过管道传输到浏览器(res 对象)。

虽然我们可以监听 proxyRes 事件并且知道响应状态是 404500,但我们无法更改响应本身。

实现需求,需要自己编写代理逻辑,或者使用其他支持响应拦截的代理模块。