Skip to content

InnoScripts2/NODE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Modern Node.js API Server

Масштабируемый RESTful API сервер с поддержкой WebSocket, аутентификацией JWT и интеграцией баз данных MongoDB и Redis.

🚀 Технологический стек

Backend

  • 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 Нет

🚀 API Endpoints

Аутентификация (/api/auth)

Метод Endpoint Описание Доступ
POST /register Регистрация нового пользователя Публичный
POST /login Вход в систему Публичный
POST /refresh Обновление access токена Публичный
POST /logout Выход из системы Приватный
GET /profile Получение профиля пользователя Приватный

Системные endpoints

Метод Endpoint Описание Доступ
GET /health Проверка состояния сервера Публичный
GET /api Информация об API Публичный

🔌 WebSocket Events

Клиент → Сервер

  • 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 - Защита чувствительных данных

Рекомендации по безопасности

  1. Используйте сильные секретные ключи для JWT
  2. Регулярно обновляйте зависимости
  3. Настройте HTTPS в продакшене
  4. Используйте реверс-прокси (nginx)
  5. Регулярно делайте резервные копии данных
  6. Мониторьте логи на подозрительную активность

🚀 Развертывание

Docker (рекомендуется)

# Сборка образа
docker build -t modern-nodejs-api .

# Запуск контейнера
docker run -p 3000:3000 --env-file .env modern-nodejs-api

PM2 (продакшен)

# Установка 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
  • Количество ошибок по типам

🤝 Вклад в проект

  1. Сделайте Fork репозитория
  2. Создайте ветку для новой функции (git checkout -b feature/amazing-feature)
  3. Закоммитьте изменения (git commit -m 'Add amazing feature')
  4. Отправьте в ветку (git push origin feature/amazing-feature)
  5. Откройте Pull Request

📄 Лицензия

Этот проект лицензирован под MIT License - смотрите файл LICENSE для деталей.

👥 Авторы

  • INNO - Первоначальная работа - @InnoScripts2

🙏 Благодарности

  • Express.js сообществу за отличный фреймворк
  • MongoDB команде за мощную базу данных
  • Socket.io разработчикам за WebSocket решение
  • TypeScript команде за улучшение разработки
  • Всем контрибьюторам open-source библиотек

Понравился проект? Поставьте звездочку!

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published