节点 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
事件并且知道响应状态是 404
或 500
,但我们无法更改响应本身。
实现需求,需要自己编写代理逻辑,或者使用其他支持响应拦截的代理模块。
简而言之,我们正在使用 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
事件并且知道响应状态是 404
或 500
,但我们无法更改响应本身。
实现需求,需要自己编写代理逻辑,或者使用其他支持响应拦截的代理模块。