javascript - 在 JQuery Get Call 之后,Express 会话不会持续存在
问题描述
我正在尝试保存server
从用户调用的这个变量。提交后,他们转到另一个页面。在该页面上,我验证它们是否server
存在,如果不存在,则将它们发回。
当我运行发布请求时,会话被保存,因为我立即通过 get 请求检查它是否存在(通过客户端)。但是,如果我刷新我的页面,则不再定义会话并且将用户送回家(通过日志验证了这一点)。我认为这与cookie有关,但我似乎无法让它工作。
这是我的sessions.js路线:
const session = require('express-session');
const express = require("express");
const router = express.Router();
router.use(session({
secret: 'ssshhhhh',
resave: false,
saveUninitialized: true,
cookie: { secure: false }
}));
router.get('/check', (req, res) => {
let sesh = req.session;
console.log("Checking server exists: " + sesh.server);
res.send(sesh.server);
});
router.post('/login', (req, res) => {
let sesh = req.session;
sesh.server = req.body.server;
console.log("Setting server: " + sesh.server);
res.send(sesh.server);
});
module.exports = router;
这就是两者都返回承诺的请求的方式:
function setSession(value) {
return $.post("/sessions/login", { 'server': value }).then();
}
function getSession() {
return $.get("/sessions/check").then();
}
解决方案
来自朋友的简单解决方案。您不能在路由中实例化中间件。只需将中间件实例化移动到 app.js。