/
Gabryelf
/
Pixel-Orb
Обзор
Документация
Войти
/
Gabryelf
/
Pixel-Orb
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
server.js
90 строк
3 KB
Valeev Serj
finish_update_v_0.0.1
11 авг 2026, 17:52
11 авг 2026, 17:52
d70b689
Код
Авторство
О чём код?
// server.js require('dotenv').config(); const express = require('express'); const http = require('http'); const socketIo = require('socket.io'); const cors = require('cors'); const path = require('path'); // Импорт серверных сервисов const authService = require('./src/server/services/authService'); const projectService = require('./src/server/services/projectService'); const galleryService = require('./src/server/services/galleryService'); const app = express(); const server = http.createServer(app); const io = socketIo(server, { cors: { origin: process.env.CLIENT_URL || "*", methods: ["GET", "POST"] } }); // Middleware app.use(cors()); app.use(express.json({ limit: '50mb' })); // Статические файлы app.use(express.static('public')); app.use('/src', express.static('src')); app.use('/assets', express.static('assets')); // Добавляем правильные MIME типы для JS файлов app.use((req, res, next) => { if (req.url.endsWith('.js')) { res.setHeader('Content-Type', 'application/javascript'); } next(); }); // ============ API Маршруты ============ // Auth app.post('/api/auth/register', authService.register.bind(authService)); app.post('/api/auth/login', authService.login.bind(authService)); app.post('/api/auth/guest', authService.createGuest.bind(authService)); app.get('/api/auth/me', authService.getCurrentUser.bind(authService)); // Projects app.get('/api/projects/:userId', projectService.getUserProjects.bind(projectService)); app.post('/api/projects', projectService.createProject.bind(projectService)); app.put('/api/projects/:id', projectService.updateProject.bind(projectService)); app.delete('/api/projects/:id', projectService.deleteProject.bind(projectService)); app.get('/api/project/:id', projectService.getProject.bind(projectService)); // Gallery app.get('/api/gallery', galleryService.getPublicProjects.bind(galleryService)); app.post('/api/gallery/rate', galleryService.rateProject.bind(galleryService)); // ============ WebSocket ============ io.on('connection', (socket) => { console.log('🔌 New client connected:', socket.id); socket.on('join-project', (projectId) => { socket.join(`project-${projectId}`); console.log(`📁 Client ${socket.id} joined project ${projectId}`); }); socket.on('leave-project', (projectId) => { socket.leave(`project-${projectId}`); console.log(`📁 Client ${socket.id} left project ${projectId}`); }); socket.on('pixel-update', (data) => { socket.to(`project-${data.projectId}`).emit('pixel-updated', data); }); socket.on('disconnect', () => { console.log('🔌 Client disconnected:', socket.id); }); }); // ============ SPA ============ app.get('*', (req, res) => { res.sendFile(path.join(__dirname, 'public', 'index.html')); }); // ============ Запуск ============ const PORT = process.env.PORT || 3000; server.listen(PORT, () => { console.log(`🚀 Pixel Orb server running on http://localhost:${PORT}`); });