2016-06-30 2 views
0

Я строю REST-API и имеют функцию рендеринга, которая выглядит следующим образом:Вызовите функцию маршрутного обработчика?

render = (req, res) => { 
    var output = {}, 
     async = [], 
     detailed; 

    if(req.user){ 
     detailed = req.user.obj.detailed(); 
     async.push(detailed); 
    } 
    if(Object.keys(req.query).length){ 
     output.params = req.query; 
    } 
    if(req.validationErrors().length > 0){ 
     output.errors = req.validationErrors(); 
    } 
    sequelize.Promise.all(async).then((response) => { 
     if(response.length > 0){ 
      output.user = response[0]; 
     } 
     res.json(output); 
    }); 
}; 

Она захватывает материал и выводит данные его как JSON. Обычно он запускается как последняя функция в любом запросе:

app.all('/user/me', auth, render); 

В приложении я также проверяю входные данные на разных этапах. Если вход не работает, я хочу перейти непосредственно к рендерингу. Чтобы избежать прохождения вокруг req/res повсюду, я хотел бы как-то перейти к этой маршрутизации, а не вызвать функцию, как я сейчас, это возможно? Я не могу использовать следующий, потому что иногда осталось несколько функций.

validate = (tests) =>{ 
     req.assert(tests); 
     //Go to render if validation fails. 

     //req,res 
     if (req.validationErrors().length) { 
      return render(req, res); 
     }else{ 
      return true; 
     } 
    }; 

ответ

0

Вы можете подключить некоторые Error-handling middleware, который работает ваш стандартный метод визуализации. Тогда ваши проверки маршрута должны будут генерировать ошибку.

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