Node.js Node Express can';t设置带有post请求的会话

Node.js Node Express can';t设置带有post请求的会话,node.js,session,express,express-session,Node.js,Session,Express,Express Session,我使用node express 4.0实现消息代码验证功能。 我使用会话来存储我发送的消息代码。 我按照dos的说明设置了会话中间件: app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(session({secret:'ssssss'})); app.use(exp

我使用node express 4.0实现消息代码验证功能。 我使用会话来存储我发送的消息代码。 我按照dos的说明设置了会话中间件:

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: false
}));
app.use(cookieParser());
app.use(session({secret:'ssssss'}));
app.use(express.static(path.join(__dirname, 'public')));
app.use('/uploads', express.static(path.join(__dirname, 'uploads/temp')));
但是当我使用post方法获取msg代码时,我发现会话没有成功设置

如下代码所示:

router.post('/msgCode', function(req, res) {
   req.session.test = 'test';
   // request send msg code api then response
}
当我重新发布此路由器时,我发现
req.session.test
未定义

然后我在另一个路由器中尝试:

router.get('/sendMsgTest', function(req, res) {
    req.session.test = 'test';
    res.json({
        status:0
    })
}
每次我请求
sendMsgTest
,我都可以得到
req.session.test
。当我请求另一个
get
方法时,我可以成功地获取
req.session.test


那么为什么我的post方法不起作用呢?

您没有提到如何调用post路线。您是否将会话cookie与POST请求一起发送?另外,POST方法返回的响应类型是什么

(在app.js中)

(在routes/index.js中)

(命令行)


您只需尝试session.save(),在Express4中必须提到“resave”、“saveUninitialized”


我也有同样的问题。我一直在为请求使用
fetch
,默认情况下它不发送cookie,因此我为GET和POST请求获得了不同的cookie ID。解决办法是:

fetch(url, {
  credentials: 'same-origin' // or 'include'
});

有关更多信息,请参阅。

你好,杰克,您可以在哪里解决此问题?事实上,我的问题和你描述的完全一样!谢谢您是否检查是否正在调用router.post,例如在router.post函数中插入一个console.log('test done')?你能发布你的客户端html/js代码吗?是的,你是对的。这是客户的事。它是邮递员写的,但不是我的。应用程序必须是从angular 2发送的标头中的某个内容,不允许存储会话。你知道那是什么吗?@PerStröm看起来很合法
router.post('/post', function (req, res) {
    req.session.test = 'test';
    res.json({success: true});
});

router.get('/get', function (req, res) {
    const results = {
        sessionData: req.session.test || 'session data not found'
    };
    res.json(results);
});
% curl -X POST localhost:3000/post --cookie-jar test.cookie
% {"success":true}

% curl localhost:3000/get --cookie test.cookie
% {"sessionData":"test"}
var session = require('express-session');
app.use(session({secret: 'keyboard cat', resave: false, saveUninitialized: true,cookie: { path: '/', httpOnly: true, maxAge: 30 * 30000 },rolling: true}));

router.post('/savesession', function (req, res) {
req.session.user = 'user';
req.session.save()
res.json(req.session.user);
});

router.get('/getsession', function (req, res) {
res.json(req.session.user);
});
fetch(url, {
  credentials: 'same-origin' // or 'include'
});