Files
DLE/backend/server.js

131 lines
4.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

require('dotenv').config();
const express = require('express');
const cors = require('cors');
const { ethers } = require('ethers');
const session = require('express-session');
const { app, nonceStore } = require('./app');
const usersRouter = require('./routes/users');
const authRouter = require('./routes/auth');
const identitiesRouter = require('./routes/identities');
const chatRouter = require('./routes/chat');
const { pool } = require('./db');
const helmet = require('helmet');
const { getBot, stopBot } = require('./services/telegramBot');
const pgSession = require('connect-pg-simple')(session);
const authService = require('./services/auth-service');
const logger = require('./utils/logger');
const EmailBotService = require('./services/emailBot.js');
const tablesRouter = require('./routes/tables');
const errorHandler = require('./middleware/errorHandler');
const PORT = process.env.PORT || 8000;
console.log('Начало выполнения server.js');
console.log('Переменная окружения PORT:', process.env.PORT);
console.log('Используемый порт:', process.env.PORT || 8000);
// Инициализация сервисов
async function initServices() {
try {
console.log('Инициализация сервисов...');
// Останавливаем предыдущий экземпляр бота
console.log('Перед stopBot');
await stopBot();
console.log('После stopBot, перед getBot');
getBot();
console.log('После getBot, перед созданием EmailBotService');
// Добавляем обработку ошибок при запуске бота
try {
console.log('Пробуем создать экземпляр EmailBotService');
// Запуск email-бота
console.log('Создаём экземпляр EmailBotService');
const emailBot = new EmailBotService();
await emailBot.start();
// Добавляем graceful shutdown
process.once('SIGINT', async () => {
await stopBot();
process.exit(0);
});
process.once('SIGTERM', async () => {
await stopBot();
process.exit(0);
});
} catch (error) {
if (error.code === 409) {
logger.warn(
'Another instance of Telegram bot is running. This is normal during development with nodemon'
);
// Просто логируем ошибку и продолжаем работу
// Бот будет запущен при следующем перезапуске
} else {
logger.error('Error launching Telegram bot:', error);
console.error('Ошибка при запуске Telegram-бота:', error);
}
}
console.log('Все сервисы успешно инициализированы');
} catch (error) {
console.error('Ошибка при инициализации сервисов:', error);
}
}
// Настройка сессий
app.use(
session({
store: new pgSession({
pool: pool,
tableName: 'session',
}),
secret: process.env.SESSION_SECRET || 'hb3atoken',
resave: false,
saveUninitialized: true,
cookie: {
secure: process.env.NODE_ENV === 'production',
httpOnly: true,
maxAge: 30 * 24 * 60 * 60 * 1000, // 30 дней
},
})
);
// Маршруты API
app.use('/api/users', usersRouter);
app.use('/api/auth', authRouter);
app.use('/api/identities', identitiesRouter);
app.use('/api/chat', chatRouter);
app.use('/api/tables', tablesRouter);
// Эндпоинт для проверки состояния сервера
app.get('/api/health', (req, res) => {
res.json({ status: 'ok', timestamp: new Date().toISOString() });
});
// Для отладки
// const host = app.get('host');
// console.log('host:', host);
app.listen(PORT, async () => {
try {
await initServices();
console.log(`Server is running on port ${PORT}`);
} catch (error) {
console.error('Error starting server:', error);
process.exit(1);
}
});
// Обработка ошибок
process.on('unhandledRejection', (err) => {
logger.error('Unhandled Rejection:', err);
});
process.on('uncaughtException', (err) => {
logger.error('Uncaught Exception:', err);
});
app.use(errorHandler);
module.exports = app;