| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import express from 'express';
- import cors from 'cors';
- import helmet from 'helmet';
- import rateLimit from 'express-rate-limit';
- import dotenv from 'dotenv';
- // Загрузка переменных окружения
- dotenv.config();
- // Импорт конфигурации
- import { config } from '@/config/server';
- // Импорт middleware
- import { errorHandler } from '@/middleware/errorHandler';
- import { requestLogger } from '@/middleware/logger';
- // Импорт роутов
- import { healthRouter } from '@/routes/health';
- // Создание Express приложения
- const app = express();
- // Базовые middleware
- app.use(helmet()); // Защита заголовков
- app.use(cors({
- origin: process.env.CORS_ORIGIN || 'http://localhost:3000',
- credentials: true
- }));
- // Лимитер запросов
- const limiter = rateLimit({
- windowMs: 15 * 60 * 1000, // 15 минут
- max: 100, // максимум 100 запросов с одного IP
- message: 'Слишком много запросов с этого IP, попробуйте позже.'
- });
- app.use(limiter);
- // Парсинг JSON
- app.use(express.json({ limit: '10mb' }));
- app.use(express.urlencoded({ extended: true }));
- // Логирование запросов
- app.use(requestLogger);
- // Основные роуты
- app.use('/api/health', healthRouter);
- // Обработка 404
- app.use('*', (req, res) => {
- res.status(404).json({
- success: false,
- message: 'Маршрут не найден',
- path: req.originalUrl
- });
- });
- // Обработчик ошибок
- app.use(errorHandler);
- // Запуск сервера
- const PORT = process.env.PORT || 5000;
- app.listen(PORT, () => {
- console.log(`🚀 Сервер запущен на порту ${PORT}`);
- console.log(`📊 Окружение: ${process.env.NODE_ENV || 'development'}`);
- console.log(`🌐 CORS разрешен для: ${process.env.CORS_ORIGIN || 'http://localhost:3000'}`);
- });
- // Обработка graceful shutdown
- process.on('SIGINT', () => {
- console.log('\n🛑 Получен SIGINT. Останавливаем сервер...');
- process.exit(0);
- });
- process.on('SIGTERM', () => {
- console.log('\n🛑 Получен SIGTERM. Останавливаем сервер...');
- process.exit(0);
- });
- export default app;
|