Я не могу использовать функцию, возвращающую другую функцию в помощнике express js

#node.js #function #express

Вопрос:

У меня есть этот помощник :

 function loginRequired(msg){   // this is the helper
    return function(req, res, next){
        if (req.user.is_authenticated){ // example
             return next()
         }
         //else
         req.flash('error_msg',msg)
         return res.redirect('/')
    } 
    
   }
 

и у меня есть этот маршрут ( я использую помощника в этом маршруте ) :

 router.post('/new', loginRequired(msg='You are not allowed here'), async (req, res)=>{

// code

})
 

Проблема в том, что функция, возвращаемая помощником, не выполняется, когда я запрашиваю этот маршрут, он продолжает загружаться вечно, а содержимое никогда не отправляется.

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

1. Похоже, что нет ничего плохого в функции, возвращающей функцию, и в том, как вы ее используете, поэтому проблема, скорее всего, в другом месте.

Ответ №1:

Очевидно, что с loginRequired() функцией и тем, как вы ее используете, нет ничего плохого, так что проблема, вероятно, в другом. Единственное, что я вижу, это то, что если req.user бы его не существовало, то он бы бросил.

Для дальнейшей отладки я бы посоветовал вам сделать это, чтобы убедиться, что ваш маршрут соответствует.

 function logRoute(msg) {
    return function(req, res, next) {
        console.log(msg);
        next();
    }
}

router.post('/new', logRoute("/new handler"), loginRequired(msg='You are not allowed here'), async (req, res)=>{

// code

});
 

И убедитесь, что вы видите /new handler в консоли. Если вы даже этого не видите, то проблема заключается в том, что ваш маршрут объявлен выше по течению, поскольку он не соответствует входящему запросу. Вам придется показать нам остальную часть этого кода, чтобы мы увидели, как используется маршрутизатор.