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

Как сделать работу создания-реактивного приложения с узлом Back-End API

Это очень распространенный вопрос среди более новых разработчиков реагирования, и один вопрос, который у меня был когда я начинал с реагирования и Node.js. В этом коротком примере я покажу вам, как создать работу APP React-App с Node.js и экспресс-конец. Create-raction-appcreate Проект с использованием приложения Create-React-App. NPX.

Автор оригинала: Esau Silva.

Это очень распространенный вопрос среди более новых разработчиков реагирования, и один вопрос, который у меня был когда я начинал с реагирования и Node.js. В этом коротком примере я покажу вам, как сделать Create-React-App Работа с Node.js и экспресс-конец.

Create-React-App

Создайте проект, используя Create-React-App Отказ

npx create-react-app example-create-react-app-express

Создать /клиент каталог под Пример - React-App-Express Справочник и переместите весь код RACH BOOTERPATE, созданный Create-React-App в этот новый клиентский каталог.

cd example-create-react-app-expressmkdir client

Узел экспресс-сервер

Создать Package.json Файл внутри корневого каталога ( Пример - React-app-app-express ) и скопируйте следующее содержимое:

{
  "name": "example-create-react-app-express",
  "version": "1.0.0",
  "scripts": {
    "client": "cd client && yarn start",
    "server": "nodemon server.js",
    "dev": "concurrently --kill-others-on-fail \"yarn server\" \"yarn client\""
  },
  "dependencies": {
    "body-parser": "^1.18.3",
    "express": "^4.16.4"
  },
  "devDependencies": {
    "concurrently": "^4.0.1"
  }
}

Обратите внимание, что я использую одновременно Для запуска ACT APP и сервера одновременно. -Килл-другие-на-неудачники Флаг убьет другие процессы, если вы выступаете с ненулевым кодом состояния.

Установить Номемон Глобально и серверные зависимости:

npm i nodemon -g
yarn

Создать server.js Файл и скопируйте следующее содержимое:

const express = require('express');
const bodyParser = require('body-parser');

const app = express();
const port = process.env.PORT || 5000;

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.get('/api/hello', (req, res) => {
  res.send({ express: 'Hello From Express' });
});

app.post('/api/world', (req, res) => {
  console.log(req.body);
  res.send(
    `I received your POST request. This is what you sent me: ${req.body.post}`,
  );
});

app.listen(port, () => console.log(`Listening on port ${port}`));

Это простой экспресс-сервер, который будет работать по порту 5000 и имеет два маршрута API: Получить/API/HELLO и Пост/API/Мир Отказ

В этот момент вы можете запустить сервер Express со следующей командой (еще внутри корневого каталога):

node server.js

Теперь перейдите к http://localhost: 5000/API/Hello и вы получите следующее:

Мы проверим Пост Маршрут, как только мы построим приложение React.

Приложение React

Теперь переключитесь к клиент каталог, где живет наше приложение React.

Добавьте следующую строку в Package.json Файл создан Create-React-App Отказ

"proxy": "http://localhost:5000/"

Ключ к использованию экспресс-подтверждающего сервера с проектом, созданным с помощью Create-React-App это использовать прокси. Это сообщает серверу разработки веб-пакета прокси нашим запросам API на наш сервер API, учитывая, что наш экспресс-сервер работает на localhost: 5000 Отказ

Теперь измените ./Client/src/app.js Чтобы вызвать нашу экспресс-API Back-End, выделены смелыми изменениями.

import React, { Component } from 'react';

import logo from './logo.svg';

import './App.css';

class App extends Component {
  state = {
    response: '',
    post: '',
    responseToPost: '',
  };
  
  componentDidMount() {
    this.callApi()
      .then(res => this.setState({ response: res.express }))
      .catch(err => console.log(err));
  }
  
  callApi = async () => {
    const response = await fetch('/api/hello');
    const body = await response.json();
    if (response.status !== 200) throw Error(body.message);
    
    return body;
  };
  
  handleSubmit = async e => {
    e.preventDefault();
    const response = await fetch('/api/world', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ post: this.state.post }),
    });
    const body = await response.text();
    
    this.setState({ responseToPost: body });
  };
  
render() {
    return (
      
logo

Edit src/App.js and save to reload.

Learn React

{this.state.response}

Post to Server:

this.setState({ post: e.target.value })} />

{this.state.responseToPost}

); } } export default App;

Мы создаем Callapi Метод взаимодействия с нашими Получить Express API маршрут, затем мы называем этот метод в ComponentDidmount и наконец установить состояние в ответ API, который будет Здравствуйте из Express Отказ

Обратите внимание, что мы не использовали полностью квалифицированный URL http://localhost: 5000/API/Hello Чтобы позвонить нашему API, хотя наше приложение React работает на другом порту (3000). Это из-за прокси линия, которую мы добавили в Package.json файл ранее.

У нас есть форма с одним входом. При отправке звонков Handlesubmit , который в свою очередь называет наши Пост Маршрут Express API, затем сохраняет ответ на состояние и отображает сообщение пользователям: Я получил ваш почтовый запрос. Это то, что вы отправили мне: [сообщение от ввода] Отказ

Теперь открыть ./Client/src/app.css и изменить .App-header класс следующим образом (изменения жирным шрифтом)

.App-header {
...
  min-height: 50%;
...
  padding-bottom: 10px;
}

Запуск приложения

Если у вас все еще есть сервер работает, продолжайте и остановите его, нажав Ctrl + C в своем терминале.

Из корневого каталога проекта выполните следующие действия:

yarn dev

Это запустит приложение React и запустит сервер одновременно.

Теперь перейдите к http://localhost: 3000 И вы попадете в приложение React, отображающее сообщение, исходящее из нашего Получить Экспресс маршрут. Хороший ?!

Теперь введите что-нибудь в поле ввода и отправьте форму, вы увидите ответ от Пост Экспресс маршрут отображается прямо под полевым полем.

Наконец-то посмотрите на свой терминал, вы увидите сообщение, которое мы отправили от клиента, то есть потому, что мы называем console.log на тело запроса в Пост Экспресс маршрут.

Развертывание производства к Heroku

Открыть server.js и заменить со следующим содержимым:

const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');

const app = express();
const port = process.env.PORT || 5000;

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

// API calls
app.get('/api/hello', (req, res) => {
  res.send({ express: 'Hello From Express' });
});

app.post('/api/world', (req, res) => {
  console.log(req.body);
  res.send(
    `I received your POST request. This is what you sent me: ${req.body.post}`,
  );
});

if (process.env.NODE_ENV === 'production') {
  // Serve any static files
  app.use(express.static(path.join(__dirname, 'client/build')));
    
  // Handle React routing, return all requests to React app
  app.get('*', function(req, res) {
    res.sendFile(path.join(__dirname, 'client/build', 'index.html'));
  });
}

app.listen(port, () => console.log(`Listening on port ${port}`));

Открыть ./package.json и добавьте следующее в Сценарии Вход

"start": "node server.js",
"heroku-postbuild": "cd client && npm install && npm install --only=dev --no-shrinkwrap && npm run build"

Heroku будет запускать Начать Сценарий по умолчанию, и это будет служить нашему приложению. Тогда мы хотим проинструктировать Heroku построить наше клиентское приложение, мы делаем это с Heroku-PostBuild скрипт

Теперь отправляйтесь на Heroku и войдите в систему (или откройте учетную запись, если у вас нет одного).

Создайте новое приложение и дайте ему имя

Нажмите на Развертывание Вкладка и следуйте инструкциям по развертыванию (которые, я думаю, они красивы самоуверенно, нет смысла реплицирования их здесь?)

И именно это, вы можете открыть свое приложение, нажав на Открытое приложение Кнопка в правом верхнем углу в панели инструментов Heroku для вашего приложения.

Посетите развернутое приложение для этого руководства: https://cra-express.herokuapp.com/

Другие варианты развертывания

Я пишу о других вариантах развертываниях здесь:

Структура проекта

Это будет окончательная структура проекта.

Получите полный код на Github Repository Отказ

Спасибо за чтение, и я надеюсь, что вам понравилось. Любой вопрос, предложения дайте мне знать в комментариях ниже!

Вы можете следовать за мной на Twitter , Github , Средний , LinkedIn или все они.

Этот пост был изначально размещен на моем личном Веб-сайт блога Отказ

Обновление 8/25/19: Я строил молитвенное веб-приложение под названием « Мое тихое время – молитвенный журнал ». Если вы хотите остаться в цикле, пожалуйста, зарегистрируйтесь по следующей ссылке: http://b.link/mqt

Приложение будет выпущено до конца года, у меня есть большие планы для этого приложения. Чтобы увидеть несколько скриншотов макета, следуйте следующей ссылке: http://pc.cd/lpy7.

Мой DMS на Twitter Открыты, если у вас есть какие-либо вопросы относительно приложения?