req.session返回错误的值 [英] req.session returns wrong value

查看:67
本文介绍了req.session返回错误的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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有时会返回先前更新的值

I have used routes after the session middleware. I have checked in database the value got updated but req.session.lat in app.js returns previously updated value some times

日志

邮寄13.33661428451088980.19245464019774在应用中13.33661428451088980.19245464019774

inpost 13.336614284510889 80.19245464019774 in app 13.336614284510889 80.19245464019774

邮寄13.33481868432363180.18992263488768在应用中13.336614284510889(检查它有时返回先前的值)80.19245464019774

inpost 13.334818684323631 80.18992263488768 in app 13.336614284510889 (check it returns previous value sometimes) 80.19245464019774

推荐答案

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已同步,则其工作正常.

if req.session.save is synchronized its working correctly.

这篇关于req.session返回错误的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆