89 lines
2.1 KiB
JavaScript
89 lines
2.1 KiB
JavaScript
// Пример файла с роутами с валидацией
|
||
// Используйте эту структуру для организации API endpoints
|
||
|
||
const express = require('express');
|
||
const { body, param } = require('express-validator');
|
||
const validate = require('../middleware/validate');
|
||
const { strictLimiter } = require('../middleware/rateLimiter');
|
||
const logger = require('../config/logger');
|
||
|
||
const router = express.Router();
|
||
|
||
// GET endpoint
|
||
router.get('/hello', (req, res) => {
|
||
logger.info('Hello endpoint called');
|
||
res.json({
|
||
success: true,
|
||
message: 'Hello from example route!',
|
||
});
|
||
});
|
||
|
||
// POST endpoint с валидацией
|
||
router.post(
|
||
'/data',
|
||
strictLimiter, // Применить строгий rate limiter
|
||
[
|
||
body('name')
|
||
.trim()
|
||
.notEmpty()
|
||
.withMessage('Name is required')
|
||
.isLength({ min: 2, max: 50 })
|
||
.withMessage('Name must be between 2 and 50 characters'),
|
||
body('value')
|
||
.notEmpty()
|
||
.withMessage('Value is required')
|
||
.isNumeric()
|
||
.withMessage('Value must be a number'),
|
||
],
|
||
validate, // Middleware для обработки ошибок валидации
|
||
(req, res) => {
|
||
try {
|
||
const { name, value } = req.body;
|
||
|
||
logger.info(`Processing data: name=${name}, value=${value}`);
|
||
|
||
// Обработка данных
|
||
res.json({
|
||
success: true,
|
||
data: {
|
||
name,
|
||
value: Number(value),
|
||
processed: true,
|
||
timestamp: new Date().toISOString(),
|
||
},
|
||
});
|
||
} catch (err) {
|
||
logger.error('Error processing data:', err);
|
||
res.status(500).json({
|
||
success: false,
|
||
error: err.message,
|
||
});
|
||
}
|
||
}
|
||
);
|
||
|
||
// GET с параметром и валидацией
|
||
router.get(
|
||
'/item/:id',
|
||
[
|
||
param('id')
|
||
.isInt({ min: 1 })
|
||
.withMessage('ID must be a positive integer'),
|
||
],
|
||
validate,
|
||
(req, res) => {
|
||
const { id } = req.params;
|
||
logger.info(`Getting item with id: ${id}`);
|
||
|
||
res.json({
|
||
success: true,
|
||
data: {
|
||
id: Number(id),
|
||
name: 'Example Item',
|
||
},
|
||
});
|
||
}
|
||
);
|
||
|
||
module.exports = router;
|