【问题标题】:req.session returns wrong valuereq.session 返回错误值
【发布时间】:2020-10-27 14:49:31
【问题描述】:

app.js

const mongoose = require('mongoose');
const session = require('express-session');
const MongoDBStore = require('connect-mongodb-session')(session);


const MONGODB_URI =
  'mongodb+srv://@cluster0-szxlh.mongodb.net/shop';


const store = new MongoDBStore({
  uri: MONGODB_URI,
  collection: 'sessions'
});


app.use(
  session({
    secret: 'my secret',
    resave: false,
    saveUninitialized: false,
    store: store
  })
);


app.use((req, res, next) => {
  console.log("in app");
  res.locals.isAuthenticated = req.session.isLoggedIn;
  res.locals.isShopAuthenticated = req.session.isShopLoggedIn;
  res.locals.isUserAuthenticated = req.session.isUserLoggedIn;
  res.locals.islat=req.session.lat;
  res.locals.islang=req.session.lang;
  res.locals.csrfToken = req.csrfToken();
  console.log(req.session.lat); //returns wrong(previous)value
  console.log(req.session.lang); //returns wrong(previous)value
  next();
});
app.use(function (req, res, next) {
  res.set('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');
  next();
});

设置 cookie 的发布请求

exports.postHome=(req,res,next)=>{
    const lattitude=req.body.lattitude;
    const longitude= req.body.longitude;
    req.session.lat=lattitude;  //setting session
    req.session.lang=longitude; 
    req.session.save();
    console.log("inpost");
    console.log(lattitude);
    console.log(longitude);
    res.redirect('/');
  }

我在会话中间件之后使用了路由。 我已经在数据库中检查了值已更新,但 app.js 中的 req.session.lat 有时会返回先前更新的值

日志

inpost 13.336614284510889 80.19245464019774 在应用程序中 13.336614284510889 80.19245464019774

inpost 13.334818684323631 80.18992263488768 在应用程序中 13.336614284510889(检查它有时会返回以前的值) 80.19245464019774

【问题讨论】:

  • 您是否在更新会话的同时将 lat-long 保存在 db 中?
  • no bro iam 更新保存在 mongoDB 中并使用 req.session 访问它的会话值

标签: node.js mongodb express mongoose


【解决方案1】:
exports.postHome=(req,res,next)=>{
    const lattitude=req.body.lattitude;
    const longitude= req.body.longitude;
    req.session.lat=lattitude;  //setting session
    req.session.lang=longitude; 
    req.session.save(err=>{      
    if(!err)
    {
    console.log("inpost");
    console.log(lattitude);
    console.log(longitude);
    res.redirect('/');
    }
    })
    
  }

如果 req.session.save 已同步,则其工作正常。

【讨论】:

    猜你喜欢
    • 2019-02-03
    • 2015-06-19
    • 2014-01-16
    • 2021-01-19
    • 2019-10-13
    • 2020-10-05
    • 2015-11-19
    • 2020-05-27
    • 2017-04-16
    相关资源
    最近更新 更多