应用整个路径nodejs的条件

时间:2015-04-28 17:50:27

标签: javascript node.js express

我在Nodejs应用程序中有一个RESTful Api,我在发送带有数据或404的响应之前正在检查用户角色。

apiRouter.route('/users')
    .get(function (req, res) {
        var currentUser = req.decoded; // getting logged in user here
        if(currentUser.isInstructor || currentUser.isAdmin){ //checking for user's role
            User.find(function (err) {
                if(err)
                    res.send(err);
            }).exec(function (err, users) {
                res.json(users);
            })
        }else
            res.send(404);
    });

目前,我必须检查用户在/ users route(例如)的get,post,put和delete params中的角色,并基本上编写相同的代码。有没有更好的方法呢?

根据adneo答案,我正在检查/用户路线前的角色:

apiRouter.all('/users', function (req, res, next) {
        var currentUser = req.decoded;
        var isAuthorized = false;

        if (currentUser.isInstructor || currentUser.isAdmin)
            isAuthorized = true;

        if(!isAuthorized)
            res.send(404)
    })

如果用户被授权,/ users中不同动词的所有逻辑都将被执行。

1 个答案:

答案 0 :(得分:4)

您可以使用router.all将其附加到所有HTTP谓词等

apiRouter.all('/users', function (req, res, next) {
    var currentUser = req.decoded; // getting logged in user here
    if(currentUser.isInstructor || currentUser.isAdmin){ //checking for user's role
        User.find(function (err) {
            if(err)
                res.send(err);
        }).exec(function (err, users) {
            res.json(users);
        })
    }else
        res.send(404);
});