Express会话variables不会在请求中持续存在

我正在使用express-session模块来获取在Express Node.js项目中工作的会话variables。 我没有得到任何错误,并设置会话variables似乎工作,但他们不持续请求。 以下是我的代码的一个简单的部分:

server.js

 var express = require('express'); var bodyParser = require('body-parser'); var session = require('express-session'); var app = express(); app.use(bodyParser.json()); // Sessions app.use(session({ secret: config.secret })); app.use('/api/projects', require('./controllers/api/projects')); var server = app.listen(3000, function() { console.log('Server listening on', 3000) }); 

api / projects.js路由器

 var router = require('express').Router() router.get('/set', function(req, res, next) { req.session.test = "test"; res.status(200).json({"test":req.session.test}); }); router.get('/current', function(req, res, next) { res.status(200).json({"test":req.session.test}); }) 

设置variables似乎工程…

/set API调用应该设置一个名为test的会话variables。 当我使用curl尝试这个API调用时似乎工作:

 curl -X GET localhost:3000/api/projects/set --cookie "connect.sid=s%3AyP3a8siRuA-5jDxWH4T03UxNpFd6lfBq.Ha8b8eJxbtW8fAJlbgR9jumfmBpJIXNE6444fOb2Jro" {"test":"test"} 

这也是在控制台日志中确认的:

 Session { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }, test: 'test' } 

…但是下一次我检查它没有设置

当我尝试用我的第二个API调用来检查variables时,它似乎是未声明的:

 curl -X GET localhost:3000/api/projects/current --cookie "connect.sid=s%3AyP3a8siRuA-5jDxWH4T03UxNpFd6lfBq.Ha8b8eJxbtW8fAJlbgR9jumfmBpJIXNE6444fOb2Jro" {} 

这是在控制台日志中确认的, testvariables不再设置:

 Session { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true } } 

我怎样才能确保我的会话variables持续请求?

(PS:我一直坚持这一段时间,任何小提示或决议的评论是非常受欢迎的,即使你不知道你有答案)

我可以看到两个可能的原因。


首先,你可能会curlcookies。

您可以通过检查http响应来确保您正确设置了Cookie。 如果它包含一个新的connect.sid Set-Cookie头,那么你做错了什么。

或者,您可以使用带有本机cookie支持的Web浏览器来防范这种错误。


其次,您可能已经在两个请求之间重新启动服务器。

由于您没有为会话指定任何持久性存储,因此在node.js服务器重新启动之间不会有任何数据持续存在。

如果希望会话数据在node.js服务器停止或重新启动后保留,则应考虑使用某个持久性会话存储(即redis-store )。