index.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import express from 'express';
  2. import cors from 'cors';
  3. import helmet from 'helmet';
  4. import rateLimit from 'express-rate-limit';
  5. import dotenv from 'dotenv';
  6. // Загрузка переменных окружения
  7. dotenv.config();
  8. // Импорт конфигурации
  9. import { config } from '@/config/server';
  10. // Импорт middleware
  11. import { errorHandler } from '@/middleware/errorHandler';
  12. import { requestLogger } from '@/middleware/logger';
  13. // Импорт роутов
  14. import { healthRouter } from '@/routes/health';
  15. // Создание Express приложения
  16. const app = express();
  17. // Базовые middleware
  18. app.use(helmet()); // Защита заголовков
  19. app.use(cors({
  20. origin: process.env.CORS_ORIGIN || 'http://localhost:3000',
  21. credentials: true
  22. }));
  23. // Лимитер запросов
  24. const limiter = rateLimit({
  25. windowMs: 15 * 60 * 1000, // 15 минут
  26. max: 100, // максимум 100 запросов с одного IP
  27. message: 'Слишком много запросов с этого IP, попробуйте позже.'
  28. });
  29. app.use(limiter);
  30. // Парсинг JSON
  31. app.use(express.json({ limit: '10mb' }));
  32. app.use(express.urlencoded({ extended: true }));
  33. // Логирование запросов
  34. app.use(requestLogger);
  35. // Основные роуты
  36. app.use('/api/health', healthRouter);
  37. // Обработка 404
  38. app.use('*', (req, res) => {
  39. res.status(404).json({
  40. success: false,
  41. message: 'Маршрут не найден',
  42. path: req.originalUrl
  43. });
  44. });
  45. // Обработчик ошибок
  46. app.use(errorHandler);
  47. // Запуск сервера
  48. const PORT = process.env.PORT || 5000;
  49. app.listen(PORT, () => {
  50. console.log(`🚀 Сервер запущен на порту ${PORT}`);
  51. console.log(`📊 Окружение: ${process.env.NODE_ENV || 'development'}`);
  52. console.log(`🌐 CORS разрешен для: ${process.env.CORS_ORIGIN || 'http://localhost:3000'}`);
  53. });
  54. // Обработка graceful shutdown
  55. process.on('SIGINT', () => {
  56. console.log('\n🛑 Получен SIGINT. Останавливаем сервер...');
  57. process.exit(0);
  58. });
  59. process.on('SIGTERM', () => {
  60. console.log('\n🛑 Получен SIGTERM. Останавливаем сервер...');
  61. process.exit(0);
  62. });
  63. export default app;