首页 > 解决方案 > 有没有什么方法可以在不迭代的情况下从对象数组中创建属性数组?

问题描述

抱歉标题不好 - 我不知道如何格式化它。我会解释我的问题。

所以我有这个req.user:

点击

我想构建一个中间件,以便我可以检查用户是否有权访问该区域,方法是检查 req.user.privileges.region 中的任何代码是否与我在数据库中的代码匹配(1 用于管理员)。

middleware.access2 = function(req, res, next)
{
    if(req.isAuthenticated())
    {
        User.findOne({'username': req.user.username, "privileges.region": {$in: [1, req.body.regiune]}}, function(err, usr)
    {
        if(err)
        {
            console.log("middleWare.access2 - " + err);
            return res.redirect("/login");
        }
        else
        {
            if(usr !== null)
            {
                console.log(usr);
                return next();
            }
            else
            {
                return res.redirect("/login");
            }
        }
    })
    }
}

有没有办法在没有迭代的情况下做到这一点?我可以使用用户拥有的区域(来自 req.user)构建一个数组并将其传递给查询。

我可以以某种方式访问​​privileges.region,这样我就不需要迭代还是应该使用上面的想法?

谢谢。

标签: javascriptnode.jsmongodbexpressmongoose

解决方案


你可以用lodash 我写的一个基本的例子,可以细化。

const _=require('lodash')

const user={
  username:'marcu',
  privileges:[
    {
      id:1,
      region:10,
      write:1,
      edit:1
    },
    {
      id:2,
      region:15,
      write:1,
      edit:1
    },
    {
  id:3,
  region:20,
  write:1,
  edit:1
}
  ]
}

found=_.findKey(user.privileges,o=>o.region===15)

  console.log(found);

对于o.region===15,输出为 1,对于o.region===10,输出为 0,对于o.region===20,输出为 2,依此类推。findkey 返回包含该值的对象的索引。当值不存在时,结果未定义


推荐阅读