使用节点和代理API请求的React服务器

时间:2018-11-26 14:52:22

标签: node.js reactjs proxy mern

我对React还是比较陌生,并试图将应用程序部署到Openshift环境中。该应用程序由一个React JS前端组成,该前端对Node.js后端静态API进行API调用。至少是这个主意。

我发现的大多数方法都建议使用docker,但我不知道从哪里开始。 create-react-app文档提供了一个Node / 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 个答案:

答案 0 :(得分:0)

我无法使它正常工作,因为我想在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);
      });
  });
}