代码之家  ›  专栏  ›  技术社区  ›  KevinD

使用节点和代理API请求响应服务器

  •  0
  • KevinD  · 技术社区  · 7 年前

    我还不太了解如何反应,并尝试将应用程序部署到Openshift环境中。该应用程序由一个react-js前端组成,它对nodejs后端restful API进行API调用。至少是这样。

    我发现的大多数方法都建议使用Docker,但我不知道从哪里开始。这个 create-react-app 文档提供了一个节点/express服务器的例子来呈现index.html,这是我更熟悉并且已经开始工作的,但是我似乎无法设置代理来将API调用路由到后端。

    我最初尝试在package.json中设置代理,但没有成功。然后我发现 express-http-proxy 这看起来很有希望,但不能让它发挥作用。

    我的前端服务器如下所示:

    const express = require('express');
    const path = require('path');
    const app = express();
    const proxy = require('express-http-proxy');
    const PORT = process.env.OPENSHIFT_NODEJS_PORT || 8080;
    const API_PROXY_URL = process.env.APIURL
    
    app.use(express.static(path.join(__dirname)));
    
    app.use('/api', proxy(API_PROXY_URL));
    
    app.get('/*', (req, res) => {
      res.sendFile(path.join(__dirname, 'index.html'));
    });
    
    app.listen(PORT, () => {
      console.log(`Server Started on port ${PORT}`);
      console.log(`Proxy in use of ${API_PROXY_URL}`);
    });
    

    我有一个通用的API函数,它使用AXIOS进行调用:

    export function apiCall(method, path, data) {
      return new Promise((resolve, reject) => {
        return axios[method.toLowerCase()](path, data)
          .then(res => {
            return resolve(res.data);
          })
          .catch(err => {
            return reject(err.response.data.error);
          });
      });
    }
    

    例如,当我尝试登录时,它正在尝试执行 post 打电话给 <<REACTURL>>/api/auth/signin 当我想把它送到 <<APIURL>>/api/auth/signin .

    我觉得我错过了一些非常明显的东西。

    1 回复  |  直到 7 年前
        1
  •  0
  •   KevinD    7 年前

    我无法让它工作,因为我最终想要在API请求中声明完整的URL来使它工作。不漂亮,但工作是:

    export function apiCall(method, path, data) {
      let url = <<APIURL>> + path
      return new Promise((resolve, reject) => {
        return axios[method.toLowerCase()](url, data)
          .then(res => {
            return resolve(res.data);
          })
          .catch(err => {
            return reject(err.response.data.error);
          });
      });
    }