我尝试在路由中设置后,从其他路由访问我的会话令牌。我目前不成功。遵循三个文件的相关代码。
server.js
:它调用路由恒温器,登录并设置会话令牌。
var session = require('express-session');
var app = express();
app.use(session({secret: 'keyboard cat',cookie: { secure: true }}))
var router = express.Router();
var thermostats = require('./api/routes/thermostats')(router, app, session);
require('./api/routes/login')(router, app, session, thermostats);
login.js
:当用户转到localhost:3000/login/
时,登录令牌需要保存在会话中
module.exports = function(router,app, session, thermostats){
router.get('/login/', function(req, res) {
list(req, res) //response of this function has session which needs to be saved.
console.log(res.session)
app.use(session(res.session)) //trying to save the res.session as session token
});
}
thermostat.js
:在显示任何信息之前需要访问会话令牌。
module.exports = function(router,app){
router.get('/thermostats/', function(req, res) {
console.log(req.session) //Set to default/null values and not the updated session values
});
}
它可能很小但我无法弄清楚这个问题。我将不胜感激任何帮助。
谢谢
答案 0 :(得分:0)
Express-session应根据配置自动保存会话。
看着' resave'快递会话docs中的配置选项:
重新保存
强制将会话保存回会话存储,即使在请求期间从未修改过会话也是如此。根据 在你的商店这可能是必要的,但它也可以创造种族 客户端向服务器发出两个并行请求的条件 并且在一个请求中对会话所做的更改可能会被覆盖 当另一个请求结束时,即使它没有发生任何变化(这种行为 还取决于你正在使用的商店。
这是默认情况下的,因此它应该已经开始工作而无需添加app.use(session(res.session)
。
编辑:您可以通过向req.session
对象添加字段来保存到会话中:
router.get('/login/', function(req, res) {
getDataFromExternalApi(req, function(err, apiResponse) {
var data = apiResponse.data;
req.session.data = data;
// if resave option is true, this should automatically save to the session store after this request is done.
});
});
通常,您不应在请求处理程序中使用app.use
。这些通常保留用于设置服务器,因为它定义了中间件表达的用途。