我正在尝试使用http-proxy-middleware
在Express中调试代理,但无论我做什么,我都得到绝对零响应。端点发送响应但代理从不返回响应,并且永远不会触发onProxyRes
事件。此外,端点可以通过curl
,Insomnia,fetch
API和request-promise
直接访问,并且正在作为我们客户的API使用。
即使设置简单如下:
app.use('/api', proxy({
target: 'https://my.secret.endpoint',
changeOrigin: true
});
除了在超时后的ECONNRESET
,我得到绝对零响应。有什么建议?
Heureka!我找到了我要找的答案!违规方是(在我的情况下)express.urlencoded()
中间件,它做了一些诡计,最终搞砸了代理。这可以通过在代理之后应用违规中间件来解决。其他可能做到这一点的中间件包括cookie-parser
and bodyParser
(两者都被弃用)。
关于这个问题的更多信息:https://github.com/chimurai/http-proxy-middleware/issues/40
ViggoV 当目标为https时,您需要禁用SSL。
像这样:
app.use('/api', proxy({
target: 'https://my.secret.endpoint',
changeOrigin: true,
secure: false
});
另一个解决方案是任何人来到这里同样的问题,但没有解决它。
在代理配置中,确保您使用双**不匹配任何路径*
const proxy = require("http-proxy-middleware");
module.exports = function(app) {
app.use(proxy("/api/**", { // https://github.com/chimurai/http-proxy-middleware
target: "http://localhost:5000",
secure: false
}));
};
有关更多信息,请查看此reference