Масштабируемый RESTful API сервер с поддержкой WebSocket, аутентификацией JWT и интеграцией баз данных MongoDB и Redis.
- Node.js 18+ - Серверная платформа
- TypeScript - Типизированный JavaScript
- Express.js - Веб-фреймворк
- Socket.io - WebSocket коммуникация в реальном времени
- MongoDB - NoSQL база данных с Mongoose ODM
- Redis - Кеширование и управление сессиями
- JWT - JSON Web Tokens с refresh токенами
- bcryptjs - Хеширование паролей
- Helmet - Защита HTTP заголовков
- CORS - Поддержка кросс-доменных запросов
- Rate Limiting - Защита от DDoS атак
- Winston - Профессиональное логирование
- Joi - Валидация входящих данных
- Multer - Загрузка файлов
- Nodemailer - Отправка email уведомлений
- node-cron - Планировщик задач
# Клонирование репозитория
git clone <repository-url>
cd modern-nodejs-api
# Установка зависимостей
npm install
# Копирование файла окружения
cp .env.example .env
# Настройка переменных окружения
# Отредактируйте .env файл с вашими настройками
# Сборка TypeScript
npm run build
# Запуск в режиме разработки
npm run dev
# Запуск в продакшене
npm start├── src/
│ ├── config/ # Конфигурации (БД, Redis, логгер)
│ │ ├── database.ts
│ │ ├── logger.ts
│ │ └── redis.ts
│ ├── controllers/ # Контроллеры бизнес-логики
│ │ └── auth.controller.ts
│ ├── middlewares/ # Промежуточные обработчики
│ │ ├── auth.middleware.ts
│ │ └── validation.middleware.ts
│ ├── models/ # Модели данных (Mongoose)
│ │ └── User.ts
│ ├── routes/ # API маршруты
│ │ └── auth.routes.ts
│ ├── services/ # Сервисы (JWT, email, файлы)
│ │ └── jwt.service.ts
│ ├── sockets/ # WebSocket обработчики
│ │ └── socket.service.ts
│ ├── utils/ # Вспомогательные функции
│ ├── validators/ # Joi схемы валидации
│ │ └── auth.validator.ts
│ ├── app.ts # Настройка Express приложения
│ └── server.ts # Точка входа сервера
├── tests/ # Тесты
│ ├── unit/ # Юнит тесты
│ └── integration/ # Интеграционные тесты
├── uploads/ # Загруженные файлы
├── logs/ # Логи приложения
├── dist/ # Скомпилированный JavaScript
├── .env.example # Пример переменных окружения
├── tsconfig.json # Конфигурация TypeScript
├── jest.config.js # Конфигурация тестов
└── README.md # Документация
| Переменная | Описание | Пример | Обязательная |
|---|---|---|---|
PORT |
Порт сервера | 3000 |
Нет |
NODE_ENV |
Среда выполнения | production |
Нет |
MONGODB_URI |
Строка подключения к MongoDB | mongodb://localhost:27017/api |
Да |
REDIS_URL |
Строка подключения к Redis | redis://localhost:6379 |
Да |
JWT_ACCESS_SECRET |
Секретный ключ для access токенов | your-super-secret-key |
Да |
JWT_REFRESH_SECRET |
Секретный ключ для refresh токенов | your-refresh-secret-key |
Да |
JWT_ACCESS_EXPIRY |
Время жизни access токена | 15m |
Нет |
JWT_REFRESH_EXPIRY |
Время жизни refresh токена | 7d |
Нет |
CLIENT_URL |
URL клиентского приложения | http://localhost:3000 |
Нет |
LOG_LEVEL |
Уровень логирования | info |
Нет |
EMAIL_USER |
Email для отправки уведомлений | noreply@example.com |
Нет |
EMAIL_PASSWORD |
Пароль email | password |
Нет |
| Метод | Endpoint | Описание | Доступ |
|---|---|---|---|
POST |
/register |
Регистрация нового пользователя | Публичный |
POST |
/login |
Вход в систему | Публичный |
POST |
/refresh |
Обновление access токена | Публичный |
POST |
/logout |
Выход из системы | Приватный |
GET |
/profile |
Получение профиля пользователя | Приватный |
| Метод | Endpoint | Описание | Доступ |
|---|---|---|---|
GET |
/health |
Проверка состояния сервера | Публичный |
GET |
/api |
Информация об API | Публичный |
joinRoom(roomId)- Присоединение к комнатеleaveRoom(roomId)- Покидание комнатыprivateMessage({ recipientId, message })- Личное сообщениеroomMessage({ roomId, message })- Сообщение в комнатуtyping({ roomId?, recipientId? })- Индикатор набора текстаstopTyping({ roomId?, recipientId? })- Остановка индикатора
userJoined- Пользователь присоединился к комнатеuserLeft- Пользователь покинул комнатуprivateMessage- Получено личное сообщениеroomMessage- Получено сообщение в комнатеuserTyping- Пользователь набирает текстuserStoppedTyping- Пользователь перестал набирать
# Запуск всех тестов
npm test
# Запуск тестов в режиме наблюдения
npm run test:watch
# Запуск только юнит тестов
npm run test:unit
# Запуск только интеграционных тестов
npm run test:integration# Разработка
npm run dev # Запуск с hot-reload
npm run build # Сборка TypeScript
npm start # Продакшен сервер
# Код-стайл
npm run lint # Проверка ESLint
npm run lint:fix # Исправление ESLint ошибок
npm run format # Форматирование Prettier
# Тестирование
npm test # Запуск тестов
npm run test:watch # Тесты в режиме наблюдения
npm run typecheck # Проверка типов TypeScript- Helmet - Настройка безопасных HTTP заголовков
- CORS - Контроль кросс-доменных запросов
- Rate Limiting - Ограничение количества запросов
- Input Validation - Валидация всех входящих данных
- Password Hashing - Безопасное хеширование паролей
- JWT Tokens - Безопасная аутентификация
- Environment Variables - Защита чувствительных данных
- Используйте сильные секретные ключи для JWT
- Регулярно обновляйте зависимости
- Настройте HTTPS в продакшене
- Используйте реверс-прокси (nginx)
- Регулярно делайте резервные копии данных
- Мониторьте логи на подозрительную активность
# Сборка образа
docker build -t modern-nodejs-api .
# Запуск контейнера
docker run -p 3000:3000 --env-file .env modern-nodejs-api# Установка PM2
npm install -g pm2
# Запуск с PM2
pm2 start dist/server.js --name "api-server"
# Мониторинг
pm2 status
pm2 logs api-server- Локация:
./logs/ - Уровни: error, warn, info, debug
- Ротация: автоматическая (5MB, 5 файлов)
- Формат: JSON в продакшене, читаемый в разработке
- Время отклика API
- Количество подключений WebSocket
- Использование памяти и CPU
- Количество ошибок по типам
- Сделайте Fork репозитория
- Создайте ветку для новой функции (
git checkout -b feature/amazing-feature) - Закоммитьте изменения (
git commit -m 'Add amazing feature') - Отправьте в ветку (
git push origin feature/amazing-feature) - Откройте Pull Request
Этот проект лицензирован под MIT License - смотрите файл LICENSE для деталей.
- INNO - Первоначальная работа - @InnoScripts2
- Express.js сообществу за отличный фреймворк
- MongoDB команде за мощную базу данных
- Socket.io разработчикам за WebSocket решение
- TypeScript команде за улучшение разработки
- Всем контрибьюторам open-source библиотек
⭐ Понравился проект? Поставьте звездочку! ⭐