/
varsl
/
HTML-CSS
Обзор
Документация
Войти
/
varsl
/
HTML-CSS
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/server.js
163 строки
5 KB
varsl
Добавление серверной части
21 дек 2025, 23:48
21 дек 2025, 23:48
0c5e9d4
Код
Авторство
О чём код?
const express = require('express'); const cors = require('cors'); const path = require('path'); const fs = require('fs'); const { port } = require('./config'); const app = express(); app.use(cors({ origin: (origin, callback) => { if (!origin || origin.startsWith('http://localhost') || origin.startsWith('http://127.0.0.1')) { callback(null, true); } else { callback(null, true); } }, credentials: true, methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With'] })); app.use(express.json()); app.use(express.urlencoded({ extended: true })); // Serve static files from the public directory app.use(express.static(path.join(__dirname, '../public'))); const uploadsDir = path.join(__dirname, 'uploads'); if (!fs.existsSync(uploadsDir)) { fs.mkdirSync(uploadsDir, { recursive: true }); } app.use('/uploads', express.static(uploadsDir)); const authRoutes = require('./routes/auth'); const reviewRoutes = require('./routes/reviews'); const ticketRoutes = require('./routes/tickets'); const animalRoutes = require('./routes/animals'); app.use('/api/auth', authRoutes); app.use('/api/reviews', reviewRoutes); app.use('/api/tickets', ticketRoutes); app.use('/api/animals', animalRoutes); // Старый endpoint для дашборда (для обратной совместимости) app.get('/api/dashboard', async (req, res) => { try { // Перенаправляем на новый endpoint res.status(301).json({ success: false, message: 'Используйте /api/auth/dashboard-data для получения реальных данных дашборда', newEndpoint: '/api/auth/dashboard-data' }); } catch (error) { console.error('Dashboard error:', error); res.status(500).json({ success: false, message: 'Ошибка сервера' }); } }); // Health check endpoint app.get('/api/health', (req, res) => { res.json({ status: 'OK', timestamp: new Date().toISOString(), service: 'Zoo API', version: '1.0.0', endpoints: { dashboard: '/api/auth/dashboard-data' } }); }); // API documentation app.get('/api', (req, res) => { res.json({ name: 'Zoo API', version: '1.0.0', description: 'API для системы управления зоопарком', dashboard: { note: 'Для получения данных дашборда используйте новый endpoint:', endpoint: 'GET /api/auth/dashboard-data', authentication: 'Требуется JWT токен в заголовке Authorization' }, endpoints: { auth: { register: 'POST /api/auth/register', login: 'POST /api/auth/login', dashboard: 'GET /api/auth/dashboard-data', profile: 'GET /api/auth/me', logout: 'POST /api/auth/logout' }, animals: { getAll: 'GET /api/animals', getOne: 'GET /api/animals/:id', search: 'GET /api/animals/search/:query', toggleFavorite: 'POST /api/animals/:id/favorite' }, reviews: { getByAnimal: 'GET /api/reviews/animal/:animalId', create: 'POST /api/reviews', update: 'PUT /api/reviews/:id', delete: 'DELETE /api/reviews/:id' }, tickets: { create: 'POST /api/tickets', getUserTickets: 'GET /api/tickets/my', getTicket: 'GET /api/tickets/:orderId', sendEmail: 'POST /api/tickets/send-email' } } }); }); // Serve main pages app.get(['/', '/index.html'], (req, res) => { res.sendFile(path.join(__dirname, '../public/index.html')); }); app.get('/dashboard.html', (req, res) => { res.sendFile(path.join(__dirname, '../public/dashboard.html')); }); app.get('/login.html', (req, res) => { res.sendFile(path.join(__dirname, '../public/login.html')); }); app.get('/register.html', (req, res) => { res.sendFile(path.join(__dirname, '../public/register.html')); }); // 404 handler app.use((req, res) => { res.status(404).json({ success: false, message: 'Route not found', path: req.path, method: req.method }); }); // Error handler app.use((err, req, res, next) => { console.error('Error:', err); const status = err.status || 500; const message = err.message || 'Internal server error'; res.status(status).json({ success: false, message, ...(process.env.NODE_ENV === 'development' && { stack: err.stack }) }); }); // Start server app.listen(port, () => { console.log(`Server is running on port ${port}`); console.log(`API documentation: http://localhost:${port}/api`); console.log(`Health check: http://localhost:${port}/api/health`); });