【问题标题】:Variable added to Node.js express-session is undefined in next request添加到 Node.js express-session 的变量在下一个请求中未定义
【发布时间】:2018-03-24 02:32:25
【问题描述】:

我正在实现一个简单的登录功能并将数据存储在快速会话中,但无法取回。 在登录函数的 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
};

【问题讨论】:

  • 你怎么称呼/getLoginStatus
  • 我从 angular 4 http get 方法从服务中调用,我的 url 类似于 localhost:3000/api/loginroute/getLoginStatus
  • 在这种情况下,请确保已将其配置为随请求一起发送凭据。
  • 你能帮我吗?我不太确定
  • 说实话,我不知道如何在 Angular 4 上启用它。

标签: node.js session express express-session


【解决方案1】:

cookieParser 密钥设置为与express-session 密钥相似的密钥将解决此问题。

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

Doc Says

如果秘密不同,使用 cookie-parser 可能会导致问题 在这个模块和 cookie-parser 之间。

【讨论】:

  • 没用。现在我也删除了 cookieParser,因为我在 express-session 上使用最新版本
  • 似乎代码现在工作正常......这是我在调用为两个调用创建两个不同会话的方法时的错误......无论如何,感谢您的帮助:)
  • @MakarandPatil 我遇到了完全相同的问题会话已设置并且购物车具有会话对象但在它重定向回会话后设置为未定义
  • @SachinDivakar 我遇到了这个问题,因为我通过 chrome 调用第一个方法,该方法正在为 chrome 创建会话,然后我通过 POSTMAN 调用第二个方法,导致会话未定义铬而不是邮递员。所以我已经通过 UI 中的 chrome 调用了这两种方法,并且能够获得会话。
猜你喜欢
  • 2021-01-05
  • 1970-01-01
  • 2011-12-07
  • 2016-04-01
  • 2020-03-16
  • 2020-10-22
  • 2019-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多