【问题标题】:Is it possible to store a set or other datastructures as a session variable in express sessions?是否可以将一组或其他数据结构存储为快速会话中的会话变量?
【发布时间】:2018-03-14 06:01:25
【问题描述】:

我尝试在会话变量中保存一个集合:

                var rowLength = result.rows.length;
                var setOfPermissions = new Set();
                for (var i = 0; i < rowLength; i++) {
                    var permission = result.rows[i].permission;
                    setOfPermissions.add(permission);
                }

                req.session.permissions = setOfPermissions;

但后来当我尝试访问它时:

    var setOfPermissions = req.session.permissions;
    if(setOfPermissions.has('my permission')) //Error over here

我收到以下错误:

TypeError: setOfPermissions.has 不是函数

编辑:console.log("permissions:::"+ setOfPermissions); 的输出 是:

权限:::[对象对象]

【问题讨论】:

  • console.log(typeof req.session.permissions) 在 if 语句上方返回什么?看起来它确实被转换为一个对象。
  • @agm1984 它打印:permissions:::[object Object]
  • 一切正常。我认为您尝试在 Set 初始化之前检查值。
  • 会话通常以 JSON 格式存储,Set 不能直接序列化为 JSON。
  • @robertklep 那么你是说我应该使用其他结构而不是将我的值存储在一个集合中吗?你会推荐什么 ?一个数组?

标签: javascript node.js session express-session


【解决方案1】:

会话存储在 JSON 中,所以当你给会话对象赋值一个 Set 时,它会被传输到 JSON 中,当你访问检索它时,JSON 会被解析为一个对象或一个数组,由方式,没有has() 方法。

【讨论】:

  • 那么如何将 JSON 转换回 Set 呢?
  • 我为什么要这样做?我的观点是,会话应该只存储简单的数据,比如用户 ID、用户名等。
  • 使用一组(相关数据),例如一组权限,可以很容易地检查。否则我需要用另一种方式检查。只是为了方便。
  • 你可以将一个集合存储在一个对象中,带有一个唯一的key,并将这个key存储在session中,当下次请求获取session时,再使用key去获取集合。
猜你喜欢
  • 1970-01-01
  • 2016-07-06
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 2013-03-02
  • 2016-11-15
  • 2011-04-17
  • 2019-02-03
相关资源
最近更新 更多