整个路由节点的应用条件

sta*_*ash 3 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);
    });
Run Code Online (Sandbox Code Playgroud)

当前,我必须检查用户在/ users路由的get,post,put和delete参数中的角色(例如),并基本上编写相同的代码。有更好的方法吗?


根据adneo的答案,我正在/ user路由之前检查角色:

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)
    })
Run Code Online (Sandbox Code Playgroud)

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

ade*_*neo 5

您可以将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);
});
Run Code Online (Sandbox Code Playgroud)