Node http-proxy-middleware无法将本地服务器作为目标使用。

11

我有一个Node服务器,使用http-proxy-middleware代理我的API请求,类似于这篇文章中的情况。当我代理到真实的生产服务器时一切正常,但是当我将代理指向本地服务器时就不能工作。

这是我的代码:

app.use('/_api', proxy({target: 'http://localhost:9000', changeOrigin: true}));

服务器在:

http://localhost:9000/hello可以工作(我可以从浏览器访问它),但是当我尝试从自己的服务器访问它时,像这样:

http://localhost:3000/_api/hello

我得到了:

无法获取/_api/hello

如果我将localhost:9000替换为真实服务器,一切都能正常工作...

1个回答

25

您的代理请求试图使用原始请求路径访问本地服务器。

例如,当您请求

http://localhost:3000/_api/hello

您的代理正在尝试访问

http://localhost:9000/hello

_api/hello路径在您的localhost:9000上不存在,这由Cannot GET /_api/hello错误显示。

您需要重写代理请求路径,以删除_api部分:

app.use('/_api', proxy({
    target: 'http://localhost:9000', 
    changeOrigin: true,
    pathRewrite: {
        '^/_api' : '/'
    }
}));

prependPath参数不是可以做到这个吗? - celerno
@duncanhall,你能帮我一下吗?我正在尝试将我的请求从本地代理到QA或PRD,但它甚至无法识别我提供的任何路径。(https://stackoverflow.com/questions/64639757/http-proxy-middleware-the-path-is-not-recognising) - SakthiSureshAnand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接