我正在把头发拉出来,过去我做过Express会话,我已经关注了相关问题上的每一篇Stackoverflow帖子。没有运气。
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon(__dirname + '/public/favicon.ico'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({ secret: 'ponies' }));
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
app.get('/api/characters', function(req, res) {
// Initially false/undefined
if (req.session.hasViewed) {
return res.send(allCharacters.slice(req.session.currentCounter, req.session.currentCounter+2));
}
req.session.hasViewed = true;
req.session.currentCounter = counter;
res.send(allCharacters.slice(counter, counter + 2));
counter = counter + 2;
});
为什么req.sessionhasViewed
和req.session.currentCounter
始终未定义?实际上,并非总是如此,有时在第6或第7次尝试会话对象开始并且它起作用。哪个比从不工作更糟糕。
背景:视图最初应显示2个字符。如果用户按F5刷新浏览器,则应再次显示相同的两个字符,直到他/她点击其中一个字符。清除会话对象是在另一个函数中执行的。
更新:我反复按 F5 ;当您看到个人日志消息时会话启动时。
更新2:好的,所以我不知道这是否有任何区别,但上面的代码位于/api/characters
。但是,当通过Backbone路由器以“/”路由加载API时的实际URL,该路由器实例化该路由的新视图。