Настройка React и Express не должна быть сложной. Оба они поставляются с генератором проектов, который вы можете запустить из командной строки, который создает всю необходимую вам базовую файловую структуру.
После обновления npm в 2017 году вы можете запускать последнюю версию этих генераторов, используя npx
. В вашем терминале OSX / Linux просто выполните следующие команды:
mkdir node-react-app && cd node-react-app npx create-react-app client npx express-generator backend --no-view cd backend && npm install
Create-react-app поддерживается создателями React, Facebook, и является стандартным способом запуска проекта React. Под капотом он легко управляет Webpack, babel, yarn и eslint для конфигурации, которая удовлетворяет большинству потребностей. И, что лучше всего, нет блокировки, поэтому вы можете в конечном итоге отредактировать базовые конфигурации, если вам нужно что-то более сложное.
Экспресс-генератор - аналогичный инструмент, поддерживаемый создателями Express. Обычно он поставляется со своим собственным интерфейсом jade или ejs, но этого можно избежать с помощью флага --no-view
. В отличие от create-response-app, зависимости не устанавливаются сразу, поэтому мы должны npm install
.
Теперь нужно решить две проблемы.
Во-первых, оба генератора по умолчанию работают на порту 3000. В серверной части app.js обрабатывает основную логику приложения, а bin / www обрабатывает выделение портов. Чтобы изменить порт по умолчанию в bin / www, измените следующую строку:
//FROM var port = normalizePort(process.env.PORT || '3000'); //TO var port = normalizePort(process.env.PORT || '3001');
Во-вторых, приложение React работает на порту 3000, но ему необходимо отправлять запросы API на бэкэнд на порт 3001. Наивный подход заключался бы в прямой отправке запросов API на localhost: 3001.
Давайте посмотрим, что происходит с этим подходом. Перейдите в каждую папку в два отдельных терминала и запустите бэкэнд с yarn start
и клиент с npm run start
. Затем добавьте в client / src / App.js следующее:
fetch('http://localhost:3001/users') .then(response => response.text()) .then(data => console.log({data}));
Проверив консоль, вы обнаружите ошибку CORS.
Вы можете решить проблему CORS напрямую, но это в конечном итоге вызовет проблемы в производственной среде, когда клиент обращается не к localhost, а к вашему домену. К счастью, в приложении create-react-app есть простое решение. В client / package.json добавьте следующую строку:
"proxy": "http://localhost:3001"
Теперь вы можете изменить выборку на:
fetch('/users') .then(response => response.text()) .then(data => console.log({data}));
Когда сервер обновится, вы увидите успешное соединение с вашим сервером! Поздравляем с успешным подключением React и Express!
Дополнительно:
Чтобы обеспечить простую работу обоих проектов одновременно, вы можете использовать пакет npm одновременно. В основной папке приложения node-response-app выполните следующие команды:
npm init -y npm i concurrently
Теперь в package.json в разделе скриптов добавьте следующую строку:
"start": "concurrently \"cd backend && npm run start\" \"cd client && yarn start\"",
Теперь в основной папке вы можете просто запустить npm run start
, чтобы оба приложения заработали.
Если вам нужны более сложные настройки, ознакомьтесь с моими Node Base и React Base, которые я использую для своих личных проектов.