节点http-proxy-middleware不能与本地服务器一起使用作为目标

时间:2016-04-20 13:36:22

标签: javascript node.js proxy http-proxy node-http-proxy

我有一个节点服务器,我正在使用http-proxy-middleware代理我的api请求,类似于this post中发生的情况。当我代理到真正的生产服务器时,一切正常,但是当我将代理指向本地服务器时,它就无法工作。

这是我的代码:

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

服务器开启:

http://localhost:9000/hello正在运行(我可以从我的浏览器访问它),但是,当我尝试从我自己的服务器访问它时,如下所示:

http://localhost:3000/_api/hello

我得到了:

  

无法GET / _api / hello

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

1 个答案:

答案 0 :(得分:7)

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

例如,当您提出要求时

http://localhost:3000/_api/hello

您的代理正在尝试访问

http://localhost:9000/_api/hello

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

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

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