Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在node.js中使用会话_Node.js_Express Session - Fatal编程技术网

无法在node.js中使用会话

无法在node.js中使用会话,node.js,express-session,Node.js,Express Session,我正在开发登录页面。 若用户成功登录,那个么我想将用户_Id存储到会话变量中,我将使用该变量对其他页面进行身份验证 App.js var express = require('express'); var bodyParser = require('body-parser'); var mongoose = require('mongoose'); var passport = require('passport'); var cookieParser = require('cookie-par

我正在开发登录页面。
若用户成功登录,那个么我想将用户_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”
我做错了什么?

请提供帮助。

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

app.use('/user', userRoutes);
app.use('/', index);
应用程序下方。使用(会话)声明

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

谢谢,效果如预期。我还有一个问题,我如何知道我是在使用express sessions还是connect mongo module进行会话?通过查看您的代码,可以看出您正在使用express session。在app.use中,您使用了express会话的实例。如果您使用其他模块,那么您将使用其他模块的MiddleWare。我还导入了
var mongostre=require('connect-mongo')(会话),我也在使用app.use(session({secret:MySuperSecretKey),resave:false,saveUninitialized:true,store:new mongoostore({mongooseConnection:mongoose.connection}),cookie:{maxAge:180*60*1000})Mongo store仅用于存储。Express session将管理您的所有会话。好的,这是正确的方法吗?我的意思是,即使我使用此配置部署我的应用程序,它是否可以在没有任何性能问题的情况下工作?因为我读过,express session不应该用于生产web应用程序。