/
mmr97
/
laba1_API
Обзор
Документация
Войти
/
mmr97
/
laba1_API
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
lab3
server.js
69 строк
2 KB
mmr97
lab2 updates
01 дек 2025, 14:26
01 дек 2025, 14:26
d4567aa
Код
Авторство
О чём код?
const express = require('express'); const helmet = require('helmet'); const bodyParser = require('body-parser'); const rateLimit = require('express-rate-limit'); const swaggerUi = require('swagger-ui-express'); const YAML = require('yamljs'); const authRoutes = require('./src/routes/auth'); const tasksRoutesV1 = require('./src/routes/tasks.v1'); const tasksRoutesV2 = require('./src/routes/tasks.v2'); const usersRoutes = require('./src/routes/users'); const { verifyJwtOptional } = require('./src/middleware/auth'); const { idempotencyMiddleware } = require('./src/middleware/idempotency'); const { globalLimiter, copyRemainingHeader } = require('./src/middleware/rateLimit'); const swaggerDocument = YAML.load('./openapi.yaml'); const app = express(); app.use(helmet()); app.use(bodyParser.json()); // global rate limiter const limiter = rateLimit({ windowMs: 60 * 1000, max: 60, standardHeaders: true, legacyHeaders: false, handler: (req, res) => { res.set('Retry-After', Math.ceil((req.rateLimit.resetTime - Date.now())/1000)); res.set('X-Limit-Remaining', 0); res.status(429).json({ error: 'Too many requests' }); } }); app.use((req, res, next) => { const send = res.send; res.send = function(body) { if (res.get('RateLimit-Remaining') !== undefined) { res.set('X-Limit-Remaining', res.get('RateLimit-Remaining')); } return send.call(this, body); }; next(); }); app.use(limiter); // docs app.use('/docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument)); // routes app.use('/api/v1/auth', authRoutes); app.use('/api/v2/auth', authRoutes); app.use('/api/v1/tasks', tasksRoutesV1); app.use('/api/v2/tasks', tasksRoutesV2); app.use('/api/v1/users', usersRoutes); app.use('/api/v2/users', usersRoutes); app.use(globalLimiter); app.use(copyRemainingHeader); app.use('/internal', require('./src/routes/internal')); // health app.get('/health', (req, res) => res.json({ status: 'ok', time: new Date().toISOString() })); const PORT = process.env.PORT || 3000; app.listen(PORT, () => console.log(`Server listening at http://localhost:${PORT}`));