Определите место назначения API с помощью React на производственном сервере

У меня есть приложение React, которое работает с REST API, развернутым на том же компьютере, что и приложение React.

  • Приложение React размещается на порту 80 (с использованием Apache Http Server).
  • REST API - это приложение на основе Flask, развернутое на порту 5000.

В настоящее время в качестве обходного пути я установил рабочий сервер для работы на хосте X.Y.W.Z, поэтому я жестко запрограммировал цель API в файлах React:

const API_HOST = 'http: //X.Y.W.Z: 5000'

Как лучше всего установить пункт назначения API, если я хочу, чтобы он был тем же хостом, что и приложение React, но на другом порту? (Видел несколько сообщений об этом, но ни у кого не было решения, например, здесь и здесь)

Может быть, перенаправить запрос от React Router на WebServer и установить там обратный прокси? Как это можно настроить?

На сервере разработки я использовал атрибут proxy в package.json (как здесь) для пересылки запроса, но он находится на конкретном сервере разработки, и он по-прежнему должен быть жестко запрограммирован.

(Я думаю, что определение не должно зависеть от развернутого хоста (завтра я могу перейти на другой сервер, поэтому я всегда должен устанавливать цель API?)

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
156
2

Ответы 2

Измените API_HOST в соответствии со средой узла.

const API_HOST = process.env.NODE_ENV === 'production' ? 'http://X.Y.W.Z' : 'http://X.Y.W.Z:5000';.

И если вы используете прокси для сервера разработки, вы можете указать API_HOST как

const API_HOST = process.env.NODE_ENV === 'production' ? 'http://X.Y.W.Z' : '';

Хм ... похоже, он все еще жестко его кодирует, но в файле package.json. Насколько я понимаю, веб-пакет каким-то образом вводит переменную среды в приложение во время выполнения. Есть ли какая-то переменная среды Hostname? ничего подобного не нашел.

sborpo 02.10.2018 14:44
const API_HOST = process.env.NODE_ENV === 'production' ? 'http://X.Y.W.Z' : 
                                                         'http://X.Y.W.Z:5000';

И если вы используете прокси для сервера разработки, вы можете указать API_HOST как:

const API_HOST = process.env.NODE_ENV === 'production' ? 'http://X.Y.W.Z' : '';

Другие вопросы по теме