我有一个现代的网络应用程序,并且正在使用快速会话。问题是,当我尝试在其他路线上检索cookie数据时,没有得到保存。它已设置并在同一条路由上正确输出,但是当我转到另一条路由并尝试检索会话数据时,它将返回undefined
。
奇怪的是,该会话确实存储在mongodb中,但我无法检索它。
我在做什么错,我该如何解决?
以下是相关代码:
Session.js
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');
module.exports = function(app) {
var sess = {
secret: 'mySecret',
cookie: { token: null },
saveUninitialized: false,
resave: true,
store: new MongoStore({ mongooseConnection: mongoose.connection })
};
if (app.get('env') === 'production') {
app.set('trust proxy', 1);
sess.cookie.secure = true;
}
app.use(session(sess));
};
Route.js
module.exports = function(app) {
app.use(cors());
app.use(helmet());
require('../middleware/session')(app);
// Other routes...
};
文件1
router.post('/', async (req, res) => {
req.session.token = 'hello';
console.log(req.session.token); // Outputs 'hello'
res.send(req.session.token);
});
文件2 ,该文件在页面重新加载后被调用
router.get('/me', async (req, res) => {
console.log(req.session.token); // Outputs undefined
console.log(req.session);
// Outputs: "Session {
// cookie: { path: '/',
// _expires:null,
// originalMaxAge: null,
// httpOnly: true }
// }
res.send(req.session.token);
});
答案 0 :(得分:0)
您应该在app.js文件中添加以下代码
var cookieParser = require('cookie-parser');
var session = require('express-session');
app.use(cookieParser());
app.use(session({secret: "Funny secret"}));
这是简单的方法。然后,您可以为 req.session 对象分配和访问值。