我在这里拉头发,过去我已经完成了 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
. 但是,当该 API 通过为该路由实例化一个新视图的主干路由器在“/”路由处加载时的实际 URL。