【问题标题】:Angular, Express & http-proxy-middleware. How to reach remote server?Angular、Express 和 http-proxy-middleware。如何访问远程服务器?
【发布时间】:2021-05-31 08:30:19
【问题描述】:

我正在构建 MEAN 堆栈应用程序,所以我在后端节点 + 快速服务器,前端有 Angular。

Atm 我需要通过向远程非 cors 服务器发送 POST 请求来获取数据。 google了一天,明白我需要建立一个代理中间件。尝试在后端服务器上使用它:

app.use(
  "/getPrice",
createProxyMiddleware({
    target: someurl,
    changeOrigin: true,
    logLevel: "debug",
    onProxyReq(proxyReq, req, res) {
      proxyReq.setHeader("X-DV-Auth-Token", sometoken);
      proxyReq.setHeader("Access-Control-Allow-Origin", "*");
      proxyReq.setHeader("Content-Type", "application/json");
      req.body = JSON.stringify(req.body);
    },
  })
);

但是请求没有返回任何东西。 另一方面,从 PostMan 尝试相同的 url、payload 和 headers,我得到了我需要的数据的响应。

但是 PostMan 只提供基于请求的解决方案,我不能采用这种解决方案来与 express 和 http-proxy 中间件一起使用

var request = require('request');
var options = {
  'method': 'POST',
  'url': someurl,
  'headers': {
    'X-DV-Auth-Token': sometoken,
    'Content-Type': 'application/json',
    'Cookie': somecookie
  },
  body: JSON.stringify({requestBodyObject})

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

请指出我可能遗漏的地方,或者建议如何将 PostMan 的代码用于 express 和 http-proxy 解决方案。

提前致谢

【问题讨论】:

    标签: node.js angular express cors http-proxy-middleware


    【解决方案1】:

    在 http-proxy 中附加 req.body 应该使用 proxyReq.write(JSON.stringify(body))

    所以修改后的createProxyMiddleware 函数将是:

    
        app.use(
          "/getPrice",
           createProxyMiddleware({
              target: someurl,
              changeOrigin: true,
              logLevel: "debug",
              onProxyReq(proxyReq, req, res) {
                proxyReq.setHeader("X-DV-Auth-Token", sometoken);
                proxyReq.setHeader("Access-Control-Allow-Origin", "*");
                proxyReq.setHeader("Content-Type", "application/json");
                console.log(req.body);
                if (req.body) {
                  let bodyData = JSON.stringify(req.body);
                  // stream the content
                  proxyReq.write(bodyData);
               }
            },
          })
        );
    
    

    另外,在您尝试上述更改之前,请确定您是否在req.body 中接收数据。

    【讨论】:

    • 试过这个。很遗憾没有得到回应
    • 您能在控制台中查看您的 req.body 吗?
    • 使用这个解决方案 - 是的,我可以。此外,撤销问题,通过专用路由解决了这个查询,并使用控制器内部的内部异步函数。
    猜你喜欢
    • 2017-03-05
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 2021-01-01
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多