【问题标题】:JSON double encoding the valueJSON双重编码值
【发布时间】:2018-09-24 11:45:54
【问题描述】:

所以我想在我的 Mongo db 数据库中为用户存储一个会话。我正在使用 express-session 和 connect-mongo npm 包。

const MongoStore = require('connect-mongo')(session);
const session = require('express-session');

app.use(session({
  secret: 'secret',
  resave: true,
  saveUninitialized: false,
  store: new MongoStore({
    mongooseConnection: db
  })
}));

我将它存储在会话中

req.session.userId = IdOfUserFromDatabaseQuery;

{
    "_id" : "hcog9Z9Jjawb5joIax-z1Wv7txV--nYA",
    "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"summoner\":\"Blis\",\"summonerId\":\"5ba7ec0293b6220cc2f12959\"}",
    "expires" : ISODate("2018-10-07T20:39:41.911Z")
}

会话密钥:值编码为 "{\"cookie\":... 我希望它是 {cookie:...

我搜了一下,发现这种编码方式就是双重编码。我检查过。当我将它放入会话时,我没有对其进行编码,这意味着可能发生的是 express-session 自动 JSON 编码,以及当我使用时......

store: new MongoStore({
    mongooseConnection: db
  })
}));

要将会话连接到 mongo 数据库,它可能会再次对其进行编码。当我使用 MongoStore 函数将它存储在数据库中时,如何阻止它被编码。

【问题讨论】:

    标签: json mongodb express session


    【解决方案1】:

    我想通了。所以模块 connect-mongo 有一个选项可以在发送数据之前对数据进行 json 字符串化。

        app.use(session({
      secret: 'work hard',
      resave: true,
      saveUninitialized: false,
      store: new MongoStore({
        mongooseConnection: db,
        stringify: false <---- This is set to true by default, which was causing my data to get double JSON encoded.
      })
    }));
    

    【讨论】:

      猜你喜欢
      • 2015-01-12
      • 1970-01-01
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 2019-11-09
      • 2023-04-02
      相关资源
      最近更新 更多