【发布时间】:2016-05-20 05:26:34
【问题描述】:
我正在尝试使用 express 框架设置 node.js 服务器并实现会话。
这行得通:
var express = require('express');
var session = require('express-session');
var redis = require('redis');
var server = express();
var redisClient = redis.createClient();
server.use(session({secret: 'mySuperSecretKey'}));
server.listen(8000, function () {
console.log('listening...');
});
server.get('/', function (req, res) {
req.session.aSessionEntry = 'value';
res.send('Your session entry is' + req.session.aSessionEntry);
});
但是,当我在异步函数中声明 server.use(session(...)) 时,它会被忽略 - 会话处理不再起作用。
这里:
var express = require('express');
var session = require('express-session');
var redis = require('redis');
var server = express();
var redisClient = redis.createClient();
redisClient.get("sessionSecret", function(err, reply) {
server.use(session({secret: reply.toString()}));
};
server.listen(8000, function () {
console.log('listening...');
});
server.get('/', function (req, res) {
req.session.aSessionEntry = 'value';
res.send('Your session entry is' + req.session.aSessionEntry);
});
为什么不能这样做?
【问题讨论】:
-
我不确定,但我认为如果你将
server.listen放在异步函数的回调中,它应该可以工作 -
很可能是因为
use是添加到中间件中的设置函数。当您致电listen时,express 将使用已配置的内容。但是将它放在异步操作的回调中意味着listen会首先被调用,而无需设置会话。 -
见expressjs.com/en/4x/api.html#app.use。定义顺序很重要,
.get先注册可能存在问题。
标签: javascript node.js express redis express-session