【问题标题】:cannot use "Set" in a session variable express不能在会话变量 express 中使用“Set”
【发布时间】:2021-08-30 05:09:27
【问题描述】:

我试图使用 Set 作为会话值,但由于某种原因,我得到了这个意外的结果。我正在从客户端向这条路由发出两个请求。

app.post("/api/add_to_cart", (req, res) => {
    console.log(req.session.productList);
    if (req.session.productList === undefined)
        req.session.productList = new Set();
    console.log(req.session.productList);
    req.session.productList.add('one');
    console.log(req.session.productList);
    res.send();
});

输出:

undefined
Set(0) {}
Set(1) { 'one' }

{}
{}
TypeError: req.session.productList.add is not a function

但是如果我使用 Set 的数组,它会按预期工作

app.post("/api/add_to_cart", (req, res) => {
    console.log(req.session.productList);
    if (req.session.productList === undefined)
        req.session.productList = [];
    console.log(req.session.productList);
    req.session.productList.push('one');
    console.log(req.session.productList);
    res.send();
});

输出:

undefined
[]
[ 'one' ]

[ 'one' ]
[ 'one' ]
[ 'one', 'one' ]

由于某些未知原因,Set 对象被更改为 {}。

【问题讨论】:

  • 您使用的是哪个store implementation?它如何序列化和反序列化会话状态?
  • 一切都设置为默认值,我没有添加任何商店实现。这就是你所看到的和只有秘密的初始化

标签: javascript node.js express express-session


【解决方案1】:

来自the docs

req.session

要存储或访问会话数据,只需使用请求属性 req.session,由商店(通常)序列化为 JSON, 所以嵌套对象通常很好。
(突出显示我的)

...和Sets/Maps do not support JSON (de)serialisation 开箱即用。

内置的开发专用 MemoryStore does this 也是如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-03
    • 2020-12-14
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多