【发布时间】:2014-02-08 08:57:11
【问题描述】:
我见过这个问题的许多变体,但似乎没有一个能解决我的问题。我正在尝试使用Express 设置Node.js 服务器。这是我的服务器配置:
var express = require('express'),
RedisStore = require('connect-redis')(express);
var app = express();
app.use(express.urlencoded());
app.use(express.json());
app.use(express.cookieParser());
app.use(express.session({
store: new RedisStore(),
secret: APP_SECRET
}));
// Initialize redis connection
var client = redis.createClient();
client.on('connect', function() {
console.log('Connected to Redis server')
})
client.on('error', function (err) {
console.log('Error ' + err);
});
// Enable cross-origin resource sharing
app.all('*', function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'X-Requested-With');
next();
});
var api = require('./controllers/api.js');
app.post('/login', api.login);
app.get('/auth', api.auth);
app.listen(3000);
这里有一些简单的路线:
exports.login = function(req, res) {
var user = new User(req.username, req.password);
req.session.user = user;
console.log(req.session.user); //works
res.json({user:user});
}
exports.auth = function(req, res) {
console.log(req.session.user); //doesn't work
res.json(req.session.user);
}
所以在我的login 路由中,我可以按预期打印会话变量。但是如果我在访问login 路由后访问auth 路由,会话变量是未定义的。如何让 Express 会话正常工作?
【问题讨论】:
-
愚蠢的问题,但您发布的路由处理程序实际上并没有发送响应。您是否尝试过从
login进行渲染或重定向?虽然您的会话未存储在 cookie 中,但在此过程中仍会使用 cookie。如果没有响应,则永远不会返回浏览器。 -
@juanpaco 我实际上编辑了回复,但为了清楚起见,我会把它们放回去
标签: javascript node.js session express