Как отправить переменную в промежуточное программное обеспечение

#node.js #express #middleware #express-router

#node.js #экспресс #промежуточное программное обеспечение #экспресс-маршрутизатор

Вопрос:

У меня есть маршрут экспресс-маршрутизатора следующим образом:

 .post(
    authController.protect,
    itemController.createItem, //create Item
    itemController.sendNotification('new-item'), //if user exists send notification

  );
  

контроллер CreateItem имеет некоторую логику, которая может запускать sendNotifications с типом (‘new-match’) и, если пропущено, перейдет к следующему контроллеру, используя next() следующее:

 if(foo) next()
else sendNotifications('new-match')
  

промежуточное программное обеспечение my sendNotifications определяется следующим образом:

 const sendNotification = type =>
  catchAsync(async (req, res, next) => {
    if (req.userFound) {
      await Notification.create({ user: req.userFound, notType: type });
      const user = await User.findByIdAndUpdate(req.userFound, {
        $inc: { notifications: 1 }
      });
      req.userFoundEmail = user.email;
    }
    next();
  });
exports.sendNotification = sendNotification;
  

Моя проблема в том, что когда промежуточное программное обеспечение sendNotifications индуцируется из стека маршрутов, к которому оно будет иметь доступ req,res,next , но когда оно вызывается из самого контроллера req,res,next undefined

Я вызываю sendNotification изнутри контроллера, как описано выше:

 sendNotification('new-match');
  

Как я могу предоставить доступ к req, res, next обоими способами?

Комментарии:

1. Что такое catchAsync ? Ваше промежуточное программное обеспечение передается ему в качестве аргумента

2. это просто метод обработчика try catch. так что без этого моя функция была бы const sendNotification = type => async (req, res, next) => { if (req.userFound) { await Notification.create({ user: req.userFound, notType: type }); const user = await User.findByIdAndUpdate(req.userFound, { $inc: { notifications: 1 } }); req.userFoundEmail = user.email; } next(); }; exports.sendNotification = sendNotification;