【问题标题】:Unable to use sessions in node.js无法在 node.js 中使用会话
【发布时间】:2017-07-23 17:19:32
【问题描述】:

我正在开发登录页面。
如果用户成功登录,那么我想将 user_Id 存储到会话变量中,我将使用它来验证其他页面。

App.js

var express = require('express');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var passport = require('passport');
var cookieParser = require('cookie-parser');
var session = require('express-session');
app.use(bodyParser.json());
app.use('/user', userRoutes);
app.use('/', index);
app.use(cookieParser());
app.use(session({
    secret: "helloKey", 
    resave: false, 
    saveUninitialized: true,
    store: new MongoStore({ mongooseConnection: mongoose.connection}),
    cookie: { maxAge: 180 * 60 * 1000 }
}));


用户路由器

var express = require('express');
var router = express.Router();
User = require('../models/user');

//Login User
router.post('/login', function (req, res) {
    var user = new User(req.body);
    User.login(user, function (err, user) {
        if (err) {
            res.sendStatus(500);
            throw err;
        }
        if (!user) {
            res.sendStatus(404);
            return;
        }
      req.session.name = user.id;
        res.json(user.id);

    });
});


问题是如果我执行此代码,我会得到 Cannot set property 'name' of undefined
我做错了什么?
请帮忙。

【问题讨论】:

    标签: node.js express-session


    【解决方案1】:

    问题是您的路线在会话之前已经设置,因此您必须重新排序代码。 移动这些行

    app.use('/user', userRoutes);
    app.use('/', index);
    

    在 app.use(session) 声明下方。

    app.use(session({
    secret: "helloKey", 
    resave: false, 
    saveUninitialized: true,
    store: new MongoStore({ mongooseConnection: mongoose.connection}),
    cookie: { maxAge: 180 * 60 * 1000 }
    }))
    

    【讨论】:

    • 谢谢,按预期工作。我还有一个问题,我如何知道我是使用 express-sessions 还是 connect-mongo 模块进行会话。?
    • 通过查看您的代码,看起来您正在使用快速会话。在 app.use 中,您使用了快速会话的实例。如果您使用其他模块,那么您将使用其他模块的中间件
    • 我也导入了var MongoStore = require('connect-mongo')(session);,我也在使用app.use(session({ secret: "MySuperSecretKey", resave: false, saveUninitialized: true, store: new MongoStore({ mongooseConnection: mongoose.connection}), cookie: { maxAge: 180 * 60 * 1000 } }));
    • Mongo store 仅用于存储。 Express 会话将管理您的所有会话。
    • 好的,这是正确的方法吗?我的意思是,即使我使用这种配置部署我的应用程序,它会在没有任何性能问题的情况下工作吗?因为我读过,express-session 不应该用于生产网络应用程序。
    猜你喜欢
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2015-05-09
    相关资源
    最近更新 更多