Files
testRestApi/node/app.js
T
2026-10-27 20:40:34 +01:00

36 lines
1.2 KiB
JavaScript

require('dotenv').config();
const fs = require('node:fs');
const path = require('node:path');
const express = require('express');
const swaggerUi = require('swagger-ui-express');
const YAML = require('yamljs');
const apiRouter = require('./routes/api');
const app = express();
const openApiPath = path.resolve(__dirname, 'openapi.yaml');
const openApiDocument = YAML.parse(fs.readFileSync(openApiPath, 'utf8'));
app.disable('x-powered-by');
app.use(express.json({ limit: '1mb' }));
app.get('/openapi.yaml', (req, res) => res.sendFile(openApiPath));
app.use('/docs', swaggerUi.serve, swaggerUi.setup(openApiDocument));
app.get('/', (req, res) => res.redirect('/docs'));
app.use('/api', apiRouter);
app.use((req, res) => res.status(404).json({
success: false,
error: { code: 404, message: 'Not found.' },
}));
app.use((error, req, res, next) => {
if (res.headersSent) return next(error);
if (error instanceof SyntaxError && error.status === 400 && 'body' in error) {
return res.status(400).json({ success: false, error: { code: 400, message: 'Invalid JSON body.' } });
}
console.error(error);
return res.status(500).json({ success: false, error: { code: 500, message: 'Internal server error.' } });
});
module.exports = app;