Реагировать на сервер с запросами Node и Proxy API - PullRequest
0 голосов
/ 26 ноября 2018

Я относительно новичок в React и пытаюсь развернуть приложение в среде Openshift.Приложение состоит из интерфейса React JS, который выполняет API-вызовы для API-интерфейса nodejs restful.По крайней мере, это идея.

Большинство найденных мной способов предлагают использовать докер, но я не знаю, с чего начать.Документация create-react-app дает пример сервера Node / Express для рендеринга index.html, с которым я гораздо лучше знаком и начал работать, но я не могу установить прокси-сервер для маршрутизации вызовов API кback-end.

Сначала я попытался установить прокси в 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 голосов
/ 29 ноября 2018

Я не мог заставить это работать, потому что я хотел объявить полный URL-адрес в запросе API, чтобы он заработал.Не красиво, но делает работу:

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);
      });
  });
}
...