Node Express无法设置发布请求的会话

我使用node express 4.0来实现一个消息代码validationfunction。 我使用会话来存储我发送的味精代码。 我设置会话中间件作为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方法不起作用?

我遇到过同样的问题。 我一直在使用fetch请求,它不会默认发送cookie,所以我得到了GET和POST请求的不同cookie ID。 解决scheme是:

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

有关更多信息,请参见https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials

你没有提到你如何调用POST路由。 你是否发送会话cookie以及POST请求? 另外,POST方法返回什么types的响应?

(在app.js中)

 var session = require('express-session'); app.use(session({ secret: 'sooper_secret', resave: false, saveUninitialized: false })); 

(在routes / index.js中)

 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"} 

你只需要尝试session.save(),而在express 4中你必须提到“resave”,“saveUninitialized”

 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); });