首页 > 解决方案 > 在 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();
}

标签: javascriptjquerynode.jsexpressexpress-session

解决方案


来自朋友的简单解决方案。您不能在路由中实例化中间件。只需将中间件实例化移动到 app.js。


推荐阅读