Thinkster node.js教程

时间:2018-03-08 23:55:03

标签: node.js express parameters router

有关配置文件路由的问题,为什么我们有两种方法可能会做同样的事情:User.findOne和User.findById?还有router.param和router.get的执行顺序是什么?

router.param('username', function(req, res, next, username){
    User.findOne({username: username}).then(function(user){
        if(!user) { return res.sendStatus(404); }

        req.profile = user;

        return next();
    }).catch(next);
});

router.get('/:username', auth.optional, function(req, res, next){
    if(req.payload){
        User.findById(req.payload.id).then(function(user){
            if(!user) { return res.json({profile: req.profile.toProfileJSONFor(false)}); }
            return res.json({profile: req.profile.toProfileJSONFor(user)});
        });
    } else {
        return res.json({profile: req.profile.toProfileJSONFor(false)});
    }
});

1 个答案:

答案 0 :(得分:0)

非常简单地说:

FindOne查询数据库以匹配自定义标识符,而findById查询数据库以匹配唯一标识符。

同样在Express中,您定义的路线按照定义的顺序依次匹配。