Node.js ExpressJS使用中间件授权用户?

Node.js ExpressJS使用中间件授权用户?,node.js,express,Node.js,Express,比方说,我想将资源的访问限制为满足某些条件的特定人群。我现在正在做的是定义一个授权中间件,用于检查req.user是否满足这些条件 module.exports.requiresCondition = function(req, res, next){ Model.findOne({condition: condition}, function(err, model){ //check if various conditions are met. If not, retu

比方说,我想将资源的访问限制为满足某些条件的特定人群。我现在正在做的是定义一个授权中间件,用于检查req.user是否满足这些条件

module.exports.requiresCondition = function(req, res, next){
    Model.findOne({condition: condition}, function(err, model){
        //check if various conditions are met. If not, return 401
        res.locals.model = model;
        return next();
    }
}

我遇到的问题是,我无法选择要投影的数据,因为后面的路由可能使用模型的不同部分。这意味着每次我都必须得到整个模型,随着文档越来越大,效率会越来越低。当然,我可以使用需要授权的密钥在中间件中查询一次,然后在实际控制器中再次查询,但这似乎也不是特别有效。是否有更好的方式授权用户?

如果不同的路由需要不同的数据,您可以模块化中间件层
composable middelware
非常适合这样做

假设你有两条路线:

从“可组合中间件”导入组合;
router.get('/type1/:id',compose().use(Auth.hasAppAccess()).use(TypeMiddleware.getType1()),ctrl.doType1);

router.get('/type2/:id',compose().use(Auth.hasAppAccess()).use(TypeMiddleware.getType2()).use(TypeMiddleware.evenMoreOperations()),ctrl.doType2)如果不同的路由需要不同的数据,您可以模块化中间件层
composable middelware
非常适合这样做

假设你有两条路线:

从“可组合中间件”导入组合;
router.get('/type1/:id',compose().use(Auth.hasAppAccess()).use(TypeMiddleware.getType1()),ctrl.doType1);

router.get('/type2/:id',compose().use(Auth.hasAppAccess()).use(TypeMiddleware.getType2()).use(TypeMiddleware.evenMoreOperations()),ctrl.doType2)使用passport本地模块我正在使用passport。但是有些资源只属于某些用户,我不希望其他人能够访问它们。使用passport本地模块我正在使用passport。但是有些资源只属于某些用户,我不希望其他人能够访问它们。