Рубрики
Без рубрики

Как подключить приложение React к серверной части того же источника

Как обслуживать реактор и серверное серверное приложение из одного источника, не используя CORS на сервере и не беспокоясь о портах

Я думаю, что наиболее часто используемый способ запуска приложения React – это использование create-react-app . Это очень удобно.

Одна из проблем, с которой вы можете столкнуться, заключается в том, как подключить его к бэкэнду, который у вас уже есть, или к тому, который вы, возможно, захотите создать.

В разработке

При разработке приложения вы хотите воспользоваться преимуществами горячей перезагрузки и всеми другими удобными функциями create-react-app. Как вы можете объединить это с бэкэндом, не используя CORS на сервере и не беспокоясь о портах?

Я приведу пример использования Express в этом посте, но это относится к любому другому фреймворку.

Предполагая, что вы тестируете это, давайте создадим приложение React:

npx create-react-app testing

затем

cd testing

Теперь создайте простой экспресс-сервер в server.js файл, который вы можете добавить куда угодно. Он даже может находиться в отдельной папке.

Если вы решите добавить этот файл в код приложения create-react-app , запустите:

npm install express

И мы готовы идти. Добавьте эту простую экспресс-настройку:

const express = require('express');
const app = express();

app.get('/hey', (req, res) => res.send('ho!'))

app.listen(8080)

Важный момент здесь: откройте файл package.json и добавьте эту строку куда-нибудь:

"proxy": "http://localhost:8080"

Это указывает реагировать на запросы прокси-API к Node.js сервер построен с помощью Express.

Теперь запустите этот процесс узла, используя узел server.js . В другом окне вы запускаете приложение CAR с помощью npm start .

Когда браузер откроется на порту 3000 (по умолчанию), откройте DevTools и запустите:

fetch('/hey')

Если вы проверите сетевую панель, у вас должен быть успешный ответ с помощью ho! сообщение.

В производстве

В рабочей среде вы собираетесь запустить npm run build , когда будете готовы к развертыванию, и мы будем использовать экспресс-сервер для обслуживания этих статических файлов.

Вся эта прокси-система теперь бесполезна (и тоже не будет работать в производстве – она предназначена для облегчения разработки). Это означает, что вы можете оставить его в package.json файл, если вам это удобно.

В приведенном ниже коде нам требуется путь встроенный модуль узла и мы говорим приложению, чтобы оно обслуживало статическую сборку приложения React:

const express = require('express')
const path = require('path')
const app = express()

app.use(express.static(path.join(__dirname, 'build')))

app.get('/ping', (req, res) => {
  return res.send('pong')
})

app.get('/', (req, res) => {
  res.sendFile(path.join(__dirname, 'build', 'index.html'))
})

app.listen(8080)

Оригинал: “https://flaviocopes.com/how-to-serve-react-from-same-origin/”