@romaro

Как вынести цепочку middleware из роута в контроллер?

Проблема растет из того, что я не до конца понимаю, как работают цепочки промежуточных обработчиков в Express.

В проекте есть роут, который исправно обрабатывает post-запросы:

const express = require('express');
const router = express.Router();
const jsonParser = express.json();
const controller = require('../controllers/regController');

router.post('/', jsonParser, function (req, res) {
    if (!req.body) return res.sendStatus(400);
    console.log(req.body);
    res.json(
        {
            serverErr: '',
            fieldsErr: {
                username: 'Тест',
            }
        }
    );
})

module.exports = router;


Я выношу логику обработку этого роута в контроллер. Для этого в regRouter.js оставляю:
router.post('/', jsonParser, controller.register);

А из regController.js экспортирую функцию:
module.exports.register = function (req, res) {
    if (!req.body) return res.sendStatus(400);
    console.log(req.body);
    res.json(
        {
            serverErr: '',
            fieldsErr: {
                username: 'Тест',
            }
        }
    );
})


Этот вариант тоже работает, но как мне вынести в контроллер и jsonParser? Или он, как middlware верхнего уровня всегда должен оставаться в блоке и предшествовать "кастомным" обработчикам роута?
  • Вопрос задан
  • 37 просмотров
Решения вопроса 1
@StiflerProger
const express = require('express');
const jsonParser = express.json();

module.exports.register = [jsonParser, function (req, res) {
    if (!req.body) return res.sendStatus(400);
    console.log(req.body);
    res.json(
        {
            serverErr: '',
            fieldsErr: {
                username: 'Тест',
            }
        }
    );
})]


const express = require('express');
const router = express.Router();

const controller = require('../controllers/regController');

router.post('/',  controller.register)

module.exports = router;


Вроде так должно выглядеть. Поправьте если я ошибаюсь)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы