V2EX - sohoorc way to explore https://www.v2ex.com/ 2019-06-30T08:50:58Z Copyright © 2010-2018, V2EX [Node.js] 麻烦各位帮我看看我在使用 express session 时遇到的问题。 tag:www.v2ex.com,2019-06-30:/t/578726 2019-06-30T07:18:21Z 2019-06-30T08:50:58Z sohoorc https://www.v2ex.com/member/sohoorc 最近在学 nodejs,在实现 评论验证码时遇到了一个问题。

代码:

app.use(session({
  // name: identityKey,
  secret: 'xiao-gan-de-session-ce-shi',  // 用来对 session id 相关的 cookie 进行签名
  store: new MongoStore({ mongooseConnection: mongoose.connection }),  // 本地存储 session (文本文件,也可以选择其他 store,比如 redis 的)
  saveUninitialized: false,  // 是否自动保存未初始化的会话,建议 false
  resave: false,  // 是否每次请求都重新生成 session
  // unset:null,
  cookie: {
    maxAge: 10 * 3000,  // 有效期,单位是毫秒
  }
}));

app.use(function timeLog(req, res, next) {
  console.log('Time: ', Date.now())
  // req.session.captcha = captcha.text;
  next()
})

app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.use(bodyParser.raw())
app.use('/api/captcha', captcha) 
app.use('/api/comment', comment)
app.use('/api/base', base)

问题:

  1. 初始化时 mongodb 内可以看到 4 个 session 数据,我期望的是 1 条公用的 session 数据,是不是我理解有问题。
  2. 当我在 app.use('/api/captcha', captcha) 内获取到随机验证码 并像这样赋值 req.session.captcha = 4444 时,app.use('/api/comment', comment) 内因为和 captcha 内 不是一个 session,所以拿不到 captcha 这个字段。

请问我应该怎么解决呢?

]]>