Поймать весь маршрут EXCEPT для/login

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

app.get('/*', function(req,res){

});

но мне было интересно, как это сделать, чтобы исключить определенные маршруты, такие как /login или /?

Ответ 1

Я не уверен, что вы хотите, когда пользователь обращается к /login или /, но вы можете создать для них отдельные маршруты; если вы объявляете их перед catch-all, они получают первые dib при обработке входящих запросов:

app.get('/login', function(req, res) {
  ...
});

app.get('/', function(req, res) {
  ...
});

app.get('*', function(req, res) {
  ...
});

Ответ 2

Вы всегда можете поместить маршрут catch-all после тех, которые хотите исключить (см. robertklep).

Но иногда вы просто не хотите заботиться о порядке ваших маршрутов. В этом случае вы все еще можете делать то, что хотите:

app.get('*', function(req, res, next) {
  if (req.url === '/' || req.url === '/login') return next();
  ...
});

Ответ 3

Если вы хотите проверить учетные данные или аутентичность в каждом запросе, вы должны использовать функцию "Экспресс-маршрутизация" "все", вы можете использовать ее следующим образом:

app.all('/api/*', function(req, res, next){
    console.log('General Validations');
    next();
});

Вы можете разместить его перед любыми материалами маршрутизации.

Обратите внимание, что в этом случае я использовал "/api/" как путь, вы можете использовать "/", который вам подходит.

Надеюсь, что еще не поздно помочь кому-то здесь.

Ответ 4

Другим способом создания обработчика маршрутов 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 (принятый), но он дает вам больше информации о том, что пользователь запросил. Теперь у вас есть slug req.params.pageCalled для представления любой запрашиваемой страницы и может направить пользователя на соответствующую страницу, если у вас несколько разных.

Один из них, чтобы следить за (спасибо @agmin) с помощью этого подхода, /:pageCalled будет ловить маршруты только с одним /, поэтому вы не получите /route/1 и т.д. Используйте дополнительные пули, например /:pageCalled/:subPageCalled для большего количества страниц (спасибо @softcode)