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

我正在实现一个简单的loginfunction并将数据存储在快速会话中,但无法恢复。 在login函数中的loginDb.js文件中,我将用户ID存储在会话variables中,并且在getLoginStatus函数中,我试图访问userId,但是它的callback是未定义的。

我已经经历了许多与类似问题有关的post,但对我来说没有任何帮助。 不知道我在这里做错了什么。 下面是代码。

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 }; 

设置类似于express-session密钥的cookieParser密钥将解决问题。

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

Doc说

如果秘密在这个模块和cookieparsing器之间是不一样的,那么使用cookieparsing器可能会导致问题。