2015-01-18 7 views
0

Посмотрите на этих маршрутах:Запуск и тот же код в начале многих Express.js маршрутов

app.get('/', function (req, res) { 
    var legacy = false; 
    //LENGTHY CODE that sets legacy to true for old browsers 

    if (legacy === false) { 
     res.render('home'); 
    } else { 
     res.render('legacy'); 
    } 
}); 

app.get('/other', function (req, res) { 
    var legacy = false; 
    //LENGTHY CODE that sets legacy to true for old browsers 

    if (legacy === false) { 
     res.render('other'); 
    } else { 
     res.render('legacy'); 
    } 
}); 

//Many other routes like this with the legacy check. 

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

Есть ли хороший выход из этого?

Возможно, это так называемое промежуточное ПО?

Идея должна быть оценена.

+0

Зависит, для всех маршрутов вы можете использовать 'app.all', если только для некоторых маршрутов вы можете определить маршрут, который соответствует регулярному выражению или переменной (' app.get ('/: id') ') и проверять переменную на набор правил и т. д. – adeneo

ответ

1

Да, как вы сказали, это именно то, для чего требуется промежуточное ПО.

app.use(function (req, res, next) { 
    var legacy = false; 
    if (legacy) { 
     res.render('legacy'); 
    } else { 
     next(); 
    } 
}); 
+0

Thanx, что приятно знать. Однако, можете ли вы расширить свой ответ, чтобы охватить также случай, если некоторые маршруты не хотят этого устаревшего чека? (Ваш ответ охватывает случай, когда ему нужны все маршруты) – stackoverflowuser

+0

@stackoverflowuser: вы можете передавать шаблоны для использования как 'app.use (['/ abcd', '/ xyza',/\/lmn | \/pqr /], функция() {}) ' –

1

Вы можете использовать next(). Попробуйте это:

app.get(['/', '/other'], function(req, res, next){          
    //preprocessing here      
    next();                 
}); 

Он принимает путь, путь шаблон, регулярные выражения и Array. Если вам не нужны какие-то пути для этой предварительной обработки, вы используете Regex для отрицания этих путей.

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