/
kashmov
/
api-library-lr2
Обзор
Документация
Войти
/
kashmov
/
api-library-lr2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/app.js
73 строки
2 KB
kashmov
upload files
25 сен 2025, 10:30
25 сен 2025, 10:30
8d4274d
Код
Авторство
О чём код?
import express from 'express'; import morgan from 'morgan'; import helmet from 'helmet'; import cors from 'cors'; import path from 'path'; import { fileURLToPath } from 'url'; import swaggerUi from 'swagger-ui-express'; import YAML from 'yamljs'; import rateLimit from './middleware/rateLimit.js'; import notFound from './middleware/notFound.js'; import errorHandler from './middleware/error.js'; import v1Readers from './routes/v1/readers.js'; import v1Authors from './routes/v1/authors.js'; import v1Books from './routes/v1/books.js'; import v1BookCopies from './routes/v1/bookCopies.js'; import v1Loans from './routes/v1/loans.js'; import v1Auth from './routes/v1/auth.js'; import v2Readers from './routes/v2/readers.js'; import v2Authors from './routes/v2/authors.js'; import v2Books from './routes/v2/books.js'; import v2BookCopies from './routes/v2/bookCopies.js'; import v2Loans from './routes/v2/loans.js'; import v2Auth from './routes/v2/auth.js'; import internalRouter from './routes/internal.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const app = express(); // базовые мидлвары app.use(helmet()); app.use(cors()); app.use(express.json()); app.use(morgan('dev')); // rate limit на все эндпоинты app.use(rateLimit); // версии API: v1 (без page_count) app.use('/api/v1/auth', v1Auth); app.use('/api/v1/readers', v1Readers); app.use('/api/v1/authors', v1Authors); app.use('/api/v1/books', v1Books); app.use('/api/v1/book-copies', v1BookCopies); app.use('/api/v1/loans', v1Loans); // v2: то же, но у books добавлено поле page_count + отражено в Swagger app.use('/api/v2/auth', v2Auth); app.use('/api/v2/readers', v2Readers); app.use('/api/v2/authors', v2Authors); app.use('/api/v2/books', v2Books); app.use('/api/v2/book-copies', v2BookCopies); app.use('/api/v2/loans', v2Loans); app.use('/api/internal', internalRouter); // Swagger const v1Doc = YAML.load(path.join(__dirname, 'docs', 'openapi.v1.yaml')); const v2Doc = YAML.load(path.join(__dirname, 'docs', 'openapi.v2.yaml')); app.use('/docs/v1', swaggerUi.serveFiles(v1Doc), swaggerUi.setup(v1Doc)); app.use('/docs/v2', swaggerUi.serveFiles(v2Doc), swaggerUi.setup(v2Doc)); // 404 + ошибки app.use(notFound); app.use(errorHandler); export default app;