Простое приложение для отправки и сохранения сообщений, построенное на React (клиент) и Express (сервер) с SQLite базой данных.
- Клиент: React, React Router, Tailwind CSS, Axios
- Сервер: Express.js, SQLite3, Express Validator
- Контейнеризация: Docker, Docker Compose
├── client/ # React приложение
│ ├── src/
│ │ ├── components/ # React компоненты
│ │ ├── App.js # Главный компонент
│ │ └── index.js # Точка входа
│ └── package.json
├── server/ # Express сервер
│ ├── index.js # Серверный код
│ └── package.json
├── docker-compose.yml # Docker Compose конфигурация
└── Dockerfile # Production Docker образ
# Установка зависимостей для всего проекта
npm install
# Установка зависимостей для сервера
cd server
npm install
# Установка зависимостей для клиента
cd ../client
npm install# Из корневой директории - запуск клиента и сервера одновременно
npm run dev
# Или запуск по отдельности:
# Терминал 1 - Сервер (порт 5000)
cd server
npm run dev
# Терминал 2 - Клиент (порт 3000)
cd client
npm start# Сборка и запуск production версии
docker-compose up --build
# Приложение будет доступно на http://localhost:5000# Запуск в режиме разработки с hot reload
docker-compose --profile dev up --build
# Клиент: http://localhost:3000
# Сервер: http://localhost:5001# Проверка health check
curl http://localhost:5000/api/health
# Ожидаемый ответ:
# {"status":"OK","timestamp":"2025-01-01T12:00:00.000Z"}# Отправка тестового сообщения
curl -X POST http://localhost:5000/api/messages \
-H "Content-Type: application/json" \
-d '{
"name": "Иван Иванов",
"phone": "+375291234567",
"message": "Тестовое сообщение"
}'
# Ожидаемый ответ при успехе:
# {"success":true,"message":"Сообщение успешно отправлено","id":1}# Тест с невалидными данными
curl -X POST http://localhost:5000/api/messages \
-H "Content-Type: application/json" \
-d '{
"name": "А",
"phone": "123",
"message": "X"
}'
# Ожидаемый ответ с ошибками валидации:
# {"success":false,"errors":[...]}- Откройте браузер и перейдите на
http://localhost:3000(разработка) илиhttp://localhost:5000(production) - На странице приветствия нажмите "Далее"
- Заполните форму и протестируйте валидацию:
- Имя: минимум 2 символа
- Телефон: белорусский формат (+375XXXXXXXXX или 80XXXXXXXXX)
- Сообщение: минимум 2 символа
- Отправьте форму и проверьте успешное сохранение
# Если используете SQLite локально
cd server
sqlite3 messages.db
# В SQLite консоли:
.tables
SELECT * FROM messages;
.quit- ✅ Страница приветствия с дружелюбным интерфейсом
- ✅ Форма с тремя полями (имя, телефон, сообщение)
- ✅ Валидация на клиенте с понятными сообщениями об ошибках
- ✅ Блокировка кнопки во время отправки
- ✅ Очистка формы после успешной отправки
- ✅ Обратная связь пользователю (успех/ошибка)
- ✅ POST /api/messages эндпоинт
- ✅ Валидация данных на сервере
- ✅ Сохранение в SQLite базу данных
- ✅ Обработка ошибок
- ✅ Health check эндпоинт
- ✅ Имя: минимум 2 символа
- ✅ Телефон: белорусский формат (+375XXXXXXXXX или 80XXXXXXXXX)
- ✅ Сообщение: минимум 2 символа
- ✅ Валидация на клиенте и сервере
- ✅ Production Docker образ
- ✅ Docker Compose для полного стека
- ✅ Development профиль с hot reload
- ✅ Health checks
# Проверка занятых портов
netstat -ano | findstr :3000
netstat -ano | findstr :5000
# Остановка процессов (Windows)
taskkill /PID <PID> /F# Очистка Docker кэша
docker system prune -a
# Пересборка без кэша
docker-compose build --no-cache# Очистка node_modules
rm -rf node_modules package-lock.json
npm install