2016-10-06 3 views
0

у меня есть маршрут, как этотэкспресс-маршрут 404 страница никогда не был вызвал

router.get('/:username', function(req, res, next) { 
if(req.params.username){ 
     Account.find({'username':req.params.username},function(err,user){ 
     if(user.length > 0){ 
      res.render('index',{ 
      title:capitalizeFirstLetter(req.params.username) 
      }); 

     } 
     }) 
    } 
}); 

и он работал, когда я помещал имя любых моих пользователей. Но если я поставлю что-то, что не в db, оно загружается навсегда. У меня много таких маршрутов, поэтому было бы утомительно, если бы я изменил каждый из них, чтобы перейти на страницу ошибок 404.

Интересно, почему по умолчанию 404 больше не работает, что

app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 
+0

Что вы предоставляете, когда пользователь .length == 0? ... Это ответ, я думаю. –

+0

@ EduardoYáñezParareda У меня есть другие маршруты, такие как: имя пользователя/профиль и т. Д., Я не хочу изменять каждый маршрут. –

+0

вы не обрабатываете иначе case i.e., 'user.length> 0', а также используете' * 'в обработчике ошибок для любого другого неизвестного маршрута –

ответ

0

Ваш подход неправильный, как вы говорите, если я ставил любого пользователя, тогда это нормально, но когда я ставлю любое значение, которое не находится в db, оно застряло. Абсолютно он застрянет, так как вы не обрабатываете второй случай или else. Это маршрут маршрута не подходит, но проблема с обработкой.

Вы должны обрабатывать оба условия

Success and fail

if (user.length > 0) { 
    res.render('index', { 
     title: capitalizeFirstLetter(req.params.username) 
    }); 
}else{ 
     res.render('index', { 
     title: 'Your error stuff' 
    }); 
} 

ответы друга действительны, если route is not found, но в вашем случае каждый маршрут найден как ваш вопрос говорит

+0

ОК тогда .. спасибо за помощь –

0

Это потому, что вы не обрабатывает случай, когда (users.length === 0).

Вы должны сделать ошибку в этом случае.

+0

yes Я думал, что app.use поймает это? –

+0

ваш app.use() поймает любой маршрут, который не соответствует /: username. Но как только он соответствует этой форме, вы проверяете БД, если он существует ... даже если он не существует в БД, он соответствует маршруту, не так ли? Поэтому вы должны справиться с этим в самом маршруте, и в этом нет ничего плохого. –

+0

@MariaJane btw Я думаю, что ваше промежуточное ПО неправильно. –

0
router.get('*', function(req, res, next) { 
var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

Если вы используете символ * в конце ваших маршрутов, по умолчанию будут использоваться любые необработанные маршруты.

+0

что это такое, а не app.use? –

+0

Использование app.use() создает промежуточное программное обеспечение, которое в основном используется для изменения запроса/данных, где с использованием router.get (*) просто используется маршрутизация и настройка маршрута по умолчанию, если запрос не соответствует другим. –

+0

https://expressjs.com/ru/guide/using-middleware.html –

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