javascript - 为整个路线nodejs申请条件

标签 javascript node.js express

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

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 路由的获取、发布、放置和删除参数中的 Angular 色(例如),并基本上编写相同的代码。有更好的方法吗?


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

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 中不同动词的所有逻辑都将执行。

最佳答案

您可以使用 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);
});

关于javascript - 为整个路线nodejs申请条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29926502/

相关文章:

javascript - CSS3 动画在 Safari 或 IE 中不起作用

erlang - Node 的 Web Worker 会取代 Erlang 吗?

express - axios拦截器使用express req对象

node.js - 使用node.js Express,如何从同级目录提供文件

node.js - 如何在 express js 中配置 Bliss 模板?

javascript - 为什么 mozilla firefox 会记录来自 socket.io 1.2.1 的许多消息

javascript - 如何保持 Google API 处于事件状态而不必每次都登录?

javascript - 如何使用 XMLHttpRequest() 正确循环 HTTP 请求?

node.js - 无法创建 nx 工作区

node.js - 如何将图像渲染为 pdf(canvas 和 pdfkit)