【问题标题】:Can't pass req.params when using http-proxy-middleware ... NodeJS/Express使用 http-proxy-middleware 时无法传递 req.params ... NodeJS/Express
【发布时间】:2019-07-15 12:27:54
【问题描述】:

我是Node新手,使用http-proxy-middleware时无法传递请求参数..

它抛出了 404 错误

这是快速监听器:

  app.put("/api/markets/:id",()=>{..code..});

这是 axios PUT 请求:

axios
  .put("/api/markets/" + idToPass, {..Object..})
  .then(res => {
    console.log(res);
  })
  .catch(err => {
    console.log(err);
  });

这是代理中间件:

const proxy = require("http-proxy-middleware");

module.exports = function(app) {
  app.use(proxy("/api/*", { target: "http://localhost:3050" }));
};

我的客户端在 localhost:3000 (react app) 上运行 我的服务器在 localhost:3050

当我打开浏览器网络选项卡以检查请求时,我看到正在调用

localhost:3000/api/markets/idContent

不是

localhost:3050/api/markets/idContent

应该是这样的。

当我手动发送它时它可以工作

localhost:3050/api/markets/idContent

我该如何解决这个问题,有什么想法吗?

提前谢谢

【问题讨论】:

  • “当我打开浏览器网络选项卡以检查请求时,我看到正在对 localhost:3000/api/markets/idContent 进行调用”,这是预期的。您正在发送由您的服务器代理的原始相对请求(未重定向)。您不会在网络选项卡中看到目标网址。
  • 当我发出请求时,Url 并没有改变,对不起,我对 Node 很陌生,你是说预计正在对 localhost:3000/.... 进行调用。
  • P.S.其他不包含 /:id 的 axios 请求(获取、发布)效果很好

标签: node.js reactjs express proxy axios


【解决方案1】:

看来问题出在代理配置上。到目前为止,它只匹配 url 一级深度。

改用/api/api/**

const proxy = require("http-proxy-middleware");

module.exports = function(app) {
  app.use(proxy("/api", { target: "http://localhost:3050" }));
};

【讨论】:

  • 成功了,我把它改成了 /api console.log(Большое Спасибо)
  • @JozeV 很高兴我能帮上忙 :)
【解决方案2】:

您没有指定基本 URL。创建一个 axios 实例并指定正确的基本 URL:

const instance = axios.create({
  baseURL: 'http://localhost:3050'
});

然后使用该实例发出每个 axios 请求:

instance
  .put("/api/markets/" + idToPass, {..Object..})
  .then(res => {
    console.log(res);
  })
  .catch(err => {
    console.log(err);
  });

【讨论】:

  • 这会导致 CORS 问题我相信 OP 正试图避免使用代理。
  • 谢谢,希望这对某人有所帮助,我尝试了 Yuri 给出的解决方案,它奏效了
猜你喜欢
  • 2017-03-05
  • 2020-06-05
  • 2019-06-14
  • 2021-03-31
  • 2022-07-13
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多