我正在学习目前使用express和node和mongo,并且正在努力创建用户ID并将其保存到会话中。这是我的代码:
var express = require('express');
var app = express();
app.use(express.cookieParser('mysecret'));
app.use(express.session());
var port = 3000;
var databaseUrl = 'chat';
var collections = ["users", "messages"];
var db = require('mongojs').connect(databaseUrl, collections);
var users = db.collection('users');
app.set('views', __dirname + '/templates');
app.set('view engine', "jade");
app.engine('jade', require('jade').__express);
app.get("/", function(req, res){
console.log(req.session.userId);//always undefined
if (req.session.userId){
userId = req.session.userId;
console.log('has userid in session');//never appears
console.log(userId);
}else{
users.insert({ip: req.ip}, function(err, docs){
if (err) return;
userId = docs[0]._id;
req.session.userId = userId;
console.log(req.session.userId);//always shows the new generated id
});
}
res.render("page");
});
app.get('/test', function(req, res){
if (req.session.userId){
console.log(req.session.userId);
}else{
req.session.userId = 'asdfmi34qoprjifd';
}
res.send('Saved a value to req.session.userId');
});
我的意图是,如果您访问“/”,将在Mongo中创建一个用户记录(此时只有您的IP地址),并且该ID将保存到会话中。这似乎无法正常工作。
每次访问“/”时,它都会在数据库中创建一条新记录。第一次调用console.log(req.session.userId)
始终显示“未定义”。
奇怪的是,如果您访问“/ test”,它会将值保存得很好,然后您可以返回“/”并显示它在“/test".
任何指针,RTFM邀请(带FM链接),非常欢迎:)。已经检查了github上的快速示例以便使用会话,但仍然没有更明智。
答案 0 :(得分:0)
查看您需要的http://expressjs.com/api.html#cookieSession
app.use(express.cookieSession());
not express.session()