0

我目前正在学习将 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 上使用会话的快速示例,但我仍然不知道。

4

1 回答 1

0

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

app.use(express.cookieSession());不是 express.session()

于 2013-09-17T17:05:15.403 回答