Согласно практическому заданию по курсу веб-разработки, разработано трехзвенное асинхронное web-приложение на Node.js и MongoDB. Приложение реализует систему управления пользователями с полным циклом CRUD операций, аутентификацией и возможностью загрузки файлов.
- Клиентская часть: React приложение с TypeScript, Styled Components и Effector для управления состоянием
- Серверная часть: Node.js сервер на Express.js с REST API
- База данных: MongoDB для хранения данных пользователей
- Регистрация нового пользователя
- Аутентификация пользователя с JWT токенами
- Просмотр и редактирование профиля пользователя
- Удаление пользователя
- Просмотр списка всех пользователей
- Загрузка и отображение аватара пользователя
- Автоматическая маршрутизация в зависимости от статуса аутентификации
- Асинхронные операции с использованием async/await
- Node.js + Express.js - серверная платформа и фреймворк
- MongoDB + Mongoose ODM - база данных и ORM
- JWT (JSON Web Tokens) - аутентификация
- Bcryptjs - хеширование паролей
- Multer - обработка загрузки файлов
- CORS - настройка кросс-доменных запросов
- Dotenv - управление переменными окружения
- React 18 с TypeScript - пользовательский интерфейс
- Effector - управление состоянием приложения
- Styled Components - стилизация компонентов
- Axios - HTTP клиент для запросов к API
- React Router v6 - маршрутизация
- React DOM - рендеринг приложения
server/
├── models/
│ └── User.js # Модель данных пользователя
├── middleware/
│ └── auth.js # Middleware для аутентификации
├── routes/
│ ├── auth.js # Маршруты аутентификации
│ ├── users.js # Маршруты работы с пользователями
│ └── upload.js # Маршруты загрузки файлов
├── uploads/ # Директория для хранения загруженных файлов
├── .env # Переменные окружения
├── package.json # Зависимости сервера
└── server.js # Точка входа сервера
client/
├── public/
│ └── index.html # HTML шаблон
├── src/
│ ├── api/ # API клиент
│ │ └── index.ts
│ ├── store/ # Состояние приложения (Effector)
│ │ └── auth.ts
│ ├── components/ # React компоненты
│ │ ├── Auth/ # Компоненты аутентификации
│ │ │ ├── RegisterForm/
│ │ │ │ ├── index.tsx
│ │ │ │ └── style.ts
│ │ │ └── LoginForm/
│ │ │ ├── index.tsx
│ │ │ └── style.ts
│ │ ├── Profile/ # Компонент профиля
│ │ │ ├── index.tsx
│ │ │ └── style.ts
│ │ ├── Users/ # Список пользователей
│ │ │ ├── index.tsx
│ │ │ └── style.ts
│ │ └── Loader/ # Компонент загрузки
│ │ ├── index.tsx
│ │ └── style.ts
│ ├── App.tsx # Главный компонент
│ ├── App.styles.ts # Стили приложения
│ ├── index.tsx # Точка входа React
│ └── react-app-env.d.ts # Типы TypeScript
└── package.json # Зависимости клиента
- Node.js (версия 14 или выше)
- MongoDB (локально установленный или удаленный сервер)
- npm или yarn для управления зависимостями
- Скачайте MongoDB Community Edition с официального сайта
- Установите MongoDB следуя инструкциям установщика
- Создайте директорию для данных MongoDB:
C:\data\db - Запустите MongoDB сервис через командную строку:
mongodbrew tap mongodb/brew
brew install mongodb-community
brew services start mongodb-communitysudo apt-get update
sudo apt-get install mongodb
sudo service mongodb start# Перейдите в директорию сервера
cd server
# Установите зависимости
npm install
# Создайте файл .env со следующим содержимым:
# PORT=3001
# MONGODB_URI=mongodb://localhost:27017/user_management
# JWT_SECRET=your_jwt_secret_key_here
# Создайте директорию для загруженных файлов
mkdir uploads
# Запустите сервер в режиме разработки
npm run dev-server
# Или для production
npm start-server# Перейдите в директорию клиента
cd client
# Установите зависимости
npm install
# Запустите клиентское приложение
npm startPORT=3001
MONGODB_URI=mongodb://localhost:27017/user_management
JWT_SECRET=your_jwt_secret_key_hereПо умолчанию приложение использует локальную MongoDB на стандартном порту 27017. Для изменения настроек отредактируйте переменную MONGODB_URI в файле .env.
POST /api/auth/register- Регистрация нового пользователяPOST /api/auth/login- Аутентификация пользователя
GET /api/users/profile- Получение профиля текущего пользователяPUT /api/users/profile- Обновление профиля пользователяDELETE /api/users/profile- Удаление пользователяGET /api/users/all- Получение списка всех пользователей
POST /api/upload/avatar- Загрузка аватара пользователя
Приложение имеет следующий пользовательский интерфейс:
- Страница входа - форма для аутентификации
- Страница регистрации - форма создания нового аккаунта
- Профиль пользователя - просмотр и редактирование данных профиля
- Список пользователей - таблица со всеми зарегистрированными пользователями
Приложение реализует следующие меры безопасности:
- JWT аутентификация - все защищенные маршруты требуют валидный токен
- Хеширование паролей - пароли хранятся в хешированном виде с использованием bcrypt
- Валидация данных - проверка входных данных на сервере
- Защита от CSRF - использование современных практик безопасности
Модель пользователя включает следующие поля:
{
username: String, // Уникальный логин пользователя
email: String, // Уникальный email пользователя
password: String, // Хешированный пароль
firstName: String, // Фамилия
lastName: String, // Имя
age: Number, // Возраст
avatar: String, // URL аватара
createdAt: Date, // Дата создания
updatedAt: Date // Дата последнего обновления
}Для тестирования приложения выполните следующие шаги:
- Запустите MongoDB сервер
- Запустите серверную часть приложения
- Запустите клиентскую часть приложения
- Откройте браузер и перейдите по адресу
http://localhost:3000
-
Регистрация нового пользователя
- Перейдите на страницу регистрации
- Заполните все обязательные поля
- Нажмите кнопку "Зарегистрироваться"
-
Аутентификация пользователя
- Используйте созданные учетные данные
- Войдите в систему
-
Редактирование профиля
- Перейдите в профиль
- Нажмите "Редактировать"
- Измените данные и сохраните
-
Загрузка аватара
- В профиле выберите файл изображения
- Нажмите "Загрузить аватар"
-
Просмотр списка пользователей
- Перейдите на страницу "Пользователи"
- Убедитесь, что MongoDB установлен и запущен
- Проверьте, что порт 27017 не занят другим процессом
- Проверьте правильность строки подключения в
.envфайле - Убедитесь, что MongoDB запущен
- Проверьте, что клиент обращается к правильному порту сервера (3001)
- Убедитесь, что сервер настроен для обработки CORS запросов
- Убедитесь, что существует директория
uploads/ - Проверьте права доступа к директории
- Убедитесь, что размер файла не превышает 5MB
- Использование Effector для централизованного управления состоянием
- TypeScript для строгой типизации
- Styled Components для изолированных стилей компонентов
- Асинхронные функции для обработки операций ввода-вывода
- JWT токены для безопасной аутентификации
- Модульная структура компонентов
- Разделение на клиентскую, серверную части и базу данных
- Использование middleware для аутентификации
- Централизованная обработка ошибок
- Валидация данных как на клиенте, так и на сервере
Проект создан в рамках учебного задания. Все права на исходный код принадлежат автору.