快递路线404页面从未被触发过

时间:2016-10-06 08:10:52

标签: javascript node.js express

我有这样的路线

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)
          });

        }
      })
    }
});

每当我放任何用户时,它都能正常工作。名称。但是,如果我放入不在数据库中的东西,它会永远加载。我有很多这样的路线,所以如果我修改每个路线去404错误页面会很乏味。

我想知道为什么默认404不再有效,这是

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

3 个答案:

答案 0 :(得分:0)

这是因为您在(users.length === 0)时没有处理此案例。

在这种情况下你应该抛出错误。

答案 1 :(得分:0)

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

如果您在路线末尾使用*符号,则任何未处理的路线都将默认为此。

答案 2 :(得分: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有效,但在您的情况下,您的问题中找到的每条路线都是