【问题标题】:express session management not working快速会话管理不起作用
【发布时间】:2013-03-15 08:00:15
【问题描述】:

我是node.js 世界的新手。我正在尝试编写 REST 服务,但我被会话管理困住了。所以我创建了一个单独的应用程序只是为了看看我是否可以让会话工作,但它没有,这里是代码。 req.session.username 始终未定义:

var express = require('express');
var url = require('url');

var app = express()
app.use(express.cookieParser('Hiren'))
app.use(express.session({ secret: 'HirenAdesara' }))
app.use(express.bodyParser())
app.use(app.router)

//Sniff HTTP
app.all('*', function(req, res, next) {
    //Check for Authentication
            console.log(req.session)
    if ((!(/^\/auth/g.test(req.url))) && (!req.session)) {
        console.log('in app.all: Unauthorized')
        res.send(401)
    }
    else
    {
        return next()
    }
})

app.post('/auth', function(req, res) {
                var query =  req.body
                console.log('Query' + JSON.stringify(query))
                username = query.username;
                password = query.password;
                if(username == 'Hiren' && password == 'Adesara')
                {
                    req.session.username = 'Hiren';
                    console.log('New Session Created..')
                    res.send(200)
                }
                else
                {
                    console.log('New session could not be created.')
                    res.send(401)
                }
})

app.get('/projects', function(req,res) {
    console.log('inside projects' + req.session.username);
    res.send(req.session.username); })

app.listen(2048)
console.log('Listening on port 2048...')

它不起作用,我不知道这里出了什么问题。

【问题讨论】:

    标签: node.js session express session-cookies


    【解决方案1】:

    将 app.get('/'...) 中的 3 行移到它之外:

    var express = require('express');
    var querystring = require('querystring');
    
    var app = express()
    app.use(express.cookieParser('Hiren'));   // This line
    app.use(express.session({ secret: 'HirenAdesara' })); // This line
    app.use(express.bodyParser()); // This line
    
    app.get('/', function(req, res){
       res.send('hello from the root page');
    })
    
    // the rest of your code
    

    【讨论】:

    • 这解决了我的问题,如果我把它们放在app.configure(function () { 中,为什么同样的事情不会起作用??
    • 唯一的补充就是app.use(express.logger('dev'))这一行
    • 其实还是不行。我已经更新了主要的代码以反映您建议的更改并添加了一些检查点。想法?
    • 呼……谢谢赫克托。我的 curl 命令有几个问题,现在一切正常。
    • 太好了,很高兴你能弄清楚。
    最近更新 更多