无法在node.js中使用会话

时间:2017-07-23 09:13:16

标签: node.js express-session

我开发登录页面。
如果用户成功登录,那么我想将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);

    });
});


问题是,如果我执行此代码,我将无法设置属性' name'未定义的
我做错了什么? 请帮助。

1 个答案:

答案 0 :(得分:3)

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

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

在app.use(会话)声明下面。

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