2015-10-17 2 views
1

Так ПРИМЕР-Любой способ условно пропускать промежуточное программное обеспечение со следующим() в выражении?

//Functions 

var validationCheck = function(req, res, next){ 
    if(req.session.userId && req.session.token) 
     next('validationCatch') //Is this possible to skip middleware if not needed? 
    else 
     next() 
} 

var getUserId = function(req, res, next){ 
    req.session.userId = DB.getUserId 
    next() 
} 

var getToken = function(req, res, next){ 
    req.session.token = DB.getToken 
    next() 
} 

//a catcher function to direct to next function depending on route 
var validationCatch = function(req, res, next){ 
    next() 
} 

//Routes 

app.get(api + '/feature1', validationCheck, getUserId, getToken, validationCatch, feature1) 
app.get(api + '/feature2', validationCheck, getUserId, getToken, validationCatch, feature2) 

Моя цель состоит в том, чтобы пропустить ненужное промежуточное программное обеспечение, если информация уже кэшируются от предыдущих маршрутов. Таким образом, в приведенном выше примере функция2 не должна вводить getUserId и getToken, если функция1 уже вызвана, что делает ответ быстрее.

Если это невозможно, укажите более эффективную архитектуру для обработки повторяющихся процессов проверки. Спасибо

ответ

2

Вместо того, чтобы регистрировать обратные вызовы напрямую, просто позвоните в validationCheck, если необходимо. Вот простой пример: getUserId:

var validationCheck = function(req, res, next){ 
    if(req.session.userId) 
     next() 
    else { 
    getUserId(req, res, function(err){ 
     next(err) 
    }) 
    }  
} 

 Смежные вопросы

  • Нет связанных вопросов^_^