无法使用expressjs将mongo objectId保存到会话中

时间:2013-09-17 14:37:31

标签: node.js mongodb session express

我正在学习目前使用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上的快速示例以便使用会话,但仍然没有更明智。

1 个答案:

答案 0 :(得分:0)

查看您需要的http://expressjs.com/api.html#cookieSession

app.use(express.cookieSession()); not express.session()