Поймать все маршруты, кроме /login
В настоящее время я пишу API, который потребует от пользователя передать маркер аутентификации в заголовке каждого запроса. Теперь я знаю, что могу создать маршрут catchall say
app.get('/*', function(req,res){
});
но мне было интересно, как сделать так, чтобы он исключал определенные маршруты, такие как /login
или /
?
4 ответа:
Я не уверен, что вы хотите произойти, когда пользователь обращается к
/login
или/
, но вы можете создать для них отдельные маршруты; если вы объявите их до catch-all, они получат первые бабки при обработке входящих запросов:app.get('/login', function(req, res) { ... }); app.get('/', function(req, res) { ... }); app.get('*', function(req, res) { ... });
вы всегда можете разместить маршрут catch-all после тех, которые вы хотите исключить (см. robertklep ответ).
но иногда вы просто не хотите заботиться о порядке ваших маршрутов. В этом случае вы все еще можете делать то, что вы хотите:
app.get('*', function(req, res, next) { if (req.url === '/' || req.url === '/login') return next(); ... });
Если вы хотите проверить учетные данные или подлинность в каждом запросе, вы должны использовать функцию экспресс-маршрутизации "все", вы можете использовать ее следующим образом:
app.all('/api/*', function(req, res, next){ console.log('General Validations'); next(); });
вы можете разместить его перед любым материалом маршрутизации.
обратите внимание, что в этом случае я использовал " / api/ " как путь, вы можете использовать "/" ты это соответствует вашим потребностям.
надеюсь, это не слишком поздно, чтобы помочь кому-то здесь.
еще один способ сделать обработчик маршрута catch-all это:
app.get('/login', function(req, res) { //... login page }); app.get('/', function(req, res) { //...index page }); app.get('/:pageCalled', function(req, res) { console.log('retrieving page: ' + req.params.pageCalled); //... mypage.html });
это работает точно так же, как robertklep (принято) ответ, но это дает вам больше информации о том, что пользователь на самом деле просил. Теперь у вас есть слизняк
req.params.pageCalled
представлять, что страница запрашивается и может направить пользователя на соответствующую страницу, если у вас есть несколько разных.один gotchya, чтобы следить за (thx @agmin) с этим подходом,
/:pageCalled
будет ловить только маршруты с один/
, Так что вы не получите/route/1
и т. д. Используйте дополнительные пули, как/:pageCalled/:subPageCalled
для большего количества страниц (thx @softcode)