Гид по технологиям

Хранение данных React в MongoDB

6 min read Веб-разработка Обновлено 09 Jan 2026
React и MongoDB: хранение данных
React и MongoDB: хранение данных

Кратко: Этот материал показывает, как связать клиент на React с базой данных MongoDB через Express и Mongoose. Вы получите пошаговую инструкцию: от настройки MongoDB и Compass до формы в React, сервера на Express и сохранения данных в коллекции.

Важное: пример ориентирован на локальную разработку (localhost). Для продакшена используйте защищённые переменные окружения, аутентификацию и TLS.

Открытый ноутбук с редактором кода на экране

Почему NoSQL и MongoDB для приложений на React

Реляционные БД (например, MySQL) были стандартом. Но NoSQL (в частности MongoDB) приобрёл популярность благодаря гибкой структуре документов и простоте масштабирования. MongoDB хранит данные в документах JSON-подобного формата — это удобно для приложений, где схема может эволюционировать вместе с фронтендом.

Ключевые отличия:

  • Нет строго заданных строк и столбцов — документы могут иметь разные наборы полей.
  • Хорошо подходит для быстрого прототипирования и изменений модели данных.
  • Простая интеграция с Node/Express через Mongoose.

Сетевая диаграмма кластера компьютеров с узлами серверов на заднем плане

Что понадобиться перед началом

  • Node.js и npm установленный локально.
  • MongoDB (локальная инсталляция или кластер Atlas).
  • (Опционально) MongoDB Compass для визуальной работы с базой.
  • Базовое знание React, Express и JavaScript.

Краткая методология: подготовить базу → создать клиент React → сделать форму и отправку → поднять сервер Express → создать схему Mongoose → тестировать и отлаживать.

Настройка MongoDB

MongoDB — популярная NoSQL СУБД, которая хранит документы в коллекциях. Пример простого документа:

{  
  FirstName: 'Andrew',  
  Role: 'Backend Developer'  
}

Шаги для локального запуска с MongoDB Compass:

  1. Установите и запустите MongoDB сервер (или используйте Atlas и кластер).
  2. Откройте MongoDB Compass.
  3. Нажмите New Connection и укажите connection URI (например: mongodb://localhost:27017).
  4. Сохраните подключение и нажмите Connect.
  5. Нажмите Create Database, укажите имя базы и имя коллекции для демо.

Страница настроек нового подключения в MongoDB Compass

Если вы не используете Compass, можно работать через mongo shell или через GUI Atlas.

Панель с опциями в MongoDB Compass

Быстрый старт: клиент React

Создайте приложение React и запустите dev-сервер:

npx create-react-app my-app  
cd my-app  
npm start

Установите Axios для HTTP-запросов:

npm install axios

Демонстрационная форма (src/App.js)

Замените содержимое src/App.js на код ниже (файл на английском языке сохранён в код-блоке — сохраняйте его как есть):

import './App.css';  
import React, { useState } from 'react';  
import Axios from 'axios';  
  
function App() {  
  const [name, setName] = useState("")  
  const [role, setRole] = useState("")  
  
  const handleSubmit = (e) => {  
      e.preventDefault();  
  
      Axios.post('http://localhost:4000/insert', {  
          fullName: name,  
          companyRole:role  
      })  
  }  
  
  return (  
    

First Name

{setName(e.target.value)}} />

Company Role

{setRole(e.target.value)}} />
); } export default App;

Коротко о механике кода:

  • useState хранит значения полей формы.
  • onChange обновляет состояние при вводе.
  • onSubmit вызывает Axios.post к вашему бэкенду.

Добавьте стили в App.css (как в исходном примере). После изменений откройте http://localhost:3000.

Отображённая форма React в браузере

Сервер на Express: промежуточный слой

Express принимает запросы от клиента и взаимодействует с MongoDB через Mongoose. Установите зависимости в папке сервера:

npm install mongoose cors
  • Mongoose — ODM для определения схем и удобной работы с MongoDB.
  • CORS — разрешает запросы с фронтенда (разных origin) во время разработки.

Схема данных (models/dataSchema.js)

Создайте папку models и файл dataSchema.js. Пример схемы:

const mongoose = require('mongoose');  
  
const ReactFormDataSchema = new mongoose.Schema({  
    name: {  
        type: String,  
        required: true  
    },  
    role: {  
        type: String,  
        required: true  
    }  
});  
  
const User = mongoose.model('User', ReactFormDataSchema);  
module.exports = User;

Схема описывает структуру документа: поля name и role — обязательные строки.

index.js: запуск сервера и маршрут

В корне сервера создайте index.js с кодом ниже (сохраните код, как в примере):

const express = require('express');  
const mongoose = require('mongoose');  
const cors = require('cors');  
const app = express();  
const User= require('./models/ReactDataSchema')  
  
app.use(express.json());  
app.use(cors());  
  
mongoose.connect('mongodb://localhost:27017/reactdata', { useNewUrlParser: true });  
  
app.post('/insert', async(req, res) => {  
    const FirstName = req.body.firstName  
    const CompanyRole = req.body.companyRole  
  
    const formData = new User({  
        name: FirstName,  
        role: CompanyRole  
    })  
  
    try {  
        await formData.save();  
        res.send("inserted data..")  
    } catch(err) {  
        console.log(err)  
    }  
});  
  
const port = process.env.PORT || 4000;  
  
app.listen(port, () => {  
    console.log(`Server started on port ${port}`);  
});

Ключевые моменты:

  • express.json() парсит JSON тело запроса.
  • mongoose.connect устанавливает соединение с БД (URI можно вынести в переменные окружения).
  • POST /insert принимает объект с полями firstName и companyRole, создаёт модель и сохраняет документ.

Тестирование API

Примеры запросов для проверки работы сервера (curl):

curl -X POST http://localhost:4000/insert -H "Content-Type: application/json" -d '{"firstName":"Ivan","companyRole":"Engineer"}'

Или отправьте форму в браузере — данные должны появиться в коллекции MongoDB.

Варианты и альтернативы

  • Вместо MongoDB можно использовать PostgreSQL/Prisma, если нужна строгая схема и транзакции.
  • Для серверless можно использовать API Routes (Vercel) или функции AWS Lambda и подключаться к MongoDB Atlas.
  • Для форм рассмотрите React Hook Form или Formik — они упрощают валидацию и управление формой.

Когда этот подход не подходит

  • Если вам нужны сложные транзакции и сильные гарантии согласованности — реляционная СУБД будет лучше.
  • Для сверхвысокой нагрузки и сложных аналитических запросов OLAP — рассмотрите специализированные движки или денормализацию.

Безопасность и надёжность (рекомендации)

  • Никогда не храните URI с учётными данными в коде — используйте .env и секреты среды.
  • В продакшене включите TLS и аутентификацию в MongoDB.
  • Ограничьте CORS в продакшене конкретными origin.
  • Добавьте валидацию данных на бэкенде и защиту от инъекций.

Важное: при использовании MongoDB Atlas настройте IP-белый список и используйте SCRAM-аутентификацию.

Миграция и совместимость

  • При переходе на Atlas можно выполнить дамп/импорт с помощью mongodump/mongorestore.
  • Если структура документов меняется, используйте миграционные скрипты и корректно обновляйте существующие документы.

Чек-листы по ролям

Разработчик фронтенда:

  • Создать форму с валидацией.
  • Использовать Axios или fetch с обработкой ошибок.
  • [ ] Тестировать форму локально на http://localhost:3000.

Разработчик бэкенда:

  • Настроить Express и маршруты.
  • Создать схему Mongoose и обработку ошибок.
  • Настроить переменные окружения для URI и порта.

DevOps / CI:

  • Не хранить секреты в репозитории.
  • Настроить мониторинг и логи сервера.
  • Настроить резервное копирование (snapshot) MongoDB.

Тесты и критерии приёмки

Критерии приёмки:

  • Форма отправляет данные и получает успешный ответ от /insert.
  • Документ с полями name и role появляется в коллекции MongoDB.
  • Сервер корректно обрабатывает пустые или неверные данные (валидирует и возвращает ошибку).

Приёмочные тесты (ручные):

  1. Открыть форму, ввести валидные данные, нажать Submit — убедиться, что в Compass появился документ.
  2. Попробовать отправить пустую форму — ожидать ошибку валидации (400).
  3. Отключить MongoDB — проверить обработку ошибки сохранения и логирование.

Краткие сниппеты и подсказки

Пример запроса из React через Axios (с кратким обработчиком ошибок):

Axios.post('http://localhost:4000/insert', { fullName: name, companyRole: role })
  .then(res => console.log('OK', res.data))
  .catch(err => console.error('Ошибка:', err.message));

Пример вынесения строки подключения в .env:

MONGO_URI=mongodb://username:password@localhost:27017/reactdata
PORT=4000

И загрузка переменных в index.js (при использовании dotenv):

require('dotenv').config();
mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true });

Небольшая модель принятия решения (эвристика)

  • Нужна гибкая схема и быстрая итерация → MongoDB.
  • Нужны сложные реляционные связи и транзакции → PostgreSQL.
  • Планируете serverless deployment → используйте Atlas и безсерверный API.

Частые ошибки и как их исправить

  • CORS ошибка: убедитесь, что app.use(cors()) подключён до маршрутов.
  • Неправильные имена полей: сверяйте имена в Axios.post и в index.js (firstName vs fullName).
  • Соединение не устанавливается: проверьте, что MongoDB слушает порт 27017 и URI корректен.

Справочник — 1 строка

MongoDB: NoSQL база данных документов. Mongoose: ODM для работы с MongoDB в Node.js. Express: минималистичный сервер для Node.js. Axios: HTTP-клиент.

FAQ

Как хранить секреты подключения безопасно?

Вынесите URI в переменные окружения или в менеджер секретов облака. Не коммитьте .env в репозиторий.

Подходит ли этот подход для продакшена?

Да, но с дополнительными мерами: аутентификация БД, TLS, ограничение CORS, мониторинг и бэкапы.

Можно ли хранить файлы в MongoDB?

Можно через GridFS, но для больших двоичных объектов часто используют отдельные хранилища (S3 и т.п.).

Итог

  • Свяжите React, Express и MongoDB через простую форму и POST-запросы.
  • Используйте Mongoose для определения схемы и валидации.
  • В продакшене обязательно защищайте соединение, храните секреты вне кода и настраивайте резервное копирование.

Краткие выводы:

  1. Прототип от идеи до работающего локального сервиса занимает минимальное время.
  2. MongoDB даёт гибкость, но требует дополнительных мер безопасности для продакшена.
  3. Тщательно тестируйте обработку ошибок и валидацию как на фронте, так и на бэке.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Градиенты в Canva: добавить и настроить
Дизайн

Градиенты в Canva: добавить и настроить

Ошибка Disabled accounts can't be contacted в Instagram
Социальные сети

Ошибка Disabled accounts can't be contacted в Instagram

Генерация случайных чисел в Google Sheets
Google Таблицы

Генерация случайных чисел в Google Sheets

Прокручиваемые скриншоты в Windows 11
Windows

Прокручиваемые скриншоты в Windows 11

Как установить корпусной вентилятор в ПК
Железо

Как установить корпусной вентилятор в ПК

Check In в iOS 17: настройка и безопасность
How-to

Check In в iOS 17: настройка и безопасность