添加到Node.js express-session的变量在下一个请求中未定义

时间:2017-10-12 08:22:14

标签: node.js session express express-session

我正在实现一个简单的登录功能,并将数据存储在快速会话中,但无法将其恢复。 在登录功能的loginDb.js文件中,我将userId存储在会话变量中,而在getLoginStatus函数中,我正在尝试访问userId,但它正在以未定义的方式进行回退。

我经历了许多与类似问题相关的帖子,但在我的案例中没有任何帮助。不知道我在这里做错了什么。下面是代码。

server.js

var express = require('express');
var pg = require('pg');
var cookieParser = require('cookie-parser');
var bodyparser = require('body-parser');
var session = require('express-session');
var path = require('path');
const port = 3000;
const loginroute = require('./Routes/login');

var app=express();

app.use(bodyparser.json());
app.use(bodyparser.urlencoded({ extended: false }));
app.use(cookieParser());

app.use(session({
    secret: 'This is a secret',
    resave: true,
    saveUninitialized:true,
        cookie: { 
            secure: false,
            maxAge: 60000
        }
    }));

//Routes
app.use('/api/loginroute',loginroute);

app.listen(port,function(){
    console.log('app listening to port:'+port);
});

login.js

const express = require('express');
const router = express.Router();
const db = require('../DataAccessLayer/loginDb');

router.get('/getLoginStatus', db.getLoginStatus);
router.post('/login', db.login);

module.exports = router;

loginDb.js

var config = require('../Config/config');
var session = require('express-session');
var pg = require('pg');
var pool = new pg.Pool(config.development.db);

function getLoginStatus(req, res, next){
    var userId = req.session.userId;
};

function login(req, res, next) {
    pool.connect(function(err, client, done) {
    if (err) {
        console.log("not able to get connection "+ err);
        res.status(400).send(err);
    }
    var q = "select id from nodetest.users where name=$1 and password=$2";
    client.query(q, [req.body.username, req.body.password], function(err, result) {
        done();
        if(err) {
        return console.error('error running query', err);
        }
        if(result.rowCount>0){
            req.session.userId = result.rows[0].id;
        }
        res.send(result.rows);
    });
    });
};

module.exports = {
    login:login,
    getLoginStatus:getLoginStatus
};

1 个答案:

答案 0 :(得分:2)

Set cookieParser secret key similar as that of express-session secret key will fix the issue.

app.use(cookieParser('This is a secret'))

Doc Says

Using cookie-parser may result in issues if the secret is not the same between this module and cookie-parser.