【发布时间】: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