Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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 对象#<;对象>;没有方法';重置最大年龄';NodeJS_Node.js_Mongodb_Session_Express - Fatal编程技术网

Node.js 对象#<;对象>;没有方法';重置最大年龄';NodeJS

Node.js 对象#<;对象>;没有方法';重置最大年龄';NodeJS,node.js,mongodb,session,express,Node.js,Mongodb,Session,Express,我有个奇怪的问题,不知道发生了什么。。。 我尝试将connect mongo与express session一起使用,但不起作用。 我所做的。。。 我创建的server.js文件如下所示 var session = require('express-session'); var MongoStore = require('connect-mongo')(session); function Start() { var app = express();

我有个奇怪的问题,不知道发生了什么。。。 我尝试将connect mongo与express session一起使用,但不起作用。 我所做的。。。 我创建的server.js文件如下所示

var session         = require('express-session');
var MongoStore      = require('connect-mongo')(session);

function Start() {

    var app = express();

    // Include views
    app.engine('ejs', require('ejs-locals'));
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'ejs');

    // Include vendor lib's
    app.use(express.static(path.join(__dirname, '../public')));
    app.use("/public", express.static(path.join(__dirname, '../public')));
    app.use(express.static(path.join(__dirname, 'public')));

    app.use(favicon('public/favicon.ico'));
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded());
    app.use(cookieParser());

    //It's a connection to DB. I wait until the connection is established and create global DB object.
    require('./db')(function(err) {
        if (err) {
            log.crit('DB connection error!');
            throw err;
        } else {

                // After connection established i use session.
                app.use(session({
                    secret: config.get('session:secret'),
                    key: config.get('session:key'),
                    cookie: {
                        path: "/",
                        httpOnly  : true,
                        maxAge    : null
                    },
                    store: new MongoStore({mongoose_connection: DB.MONGO.connection}),
                    resave: true,
                    saveUninitialized: true
                }));

                // And after i use routes.
                var routes = require('./routes')(express);
                app.use(routes);

                app.listen(port, ipaddress, function() {
                    log.notice('Node server started on ' + [ipaddress, port].join(':'));

                    cron.dbSync(function(err, cj) {
                        ...
                    });

                });
            }
        });

    };
对于DB连接,我使用mongoose。DB.MONGO包含mongoose对象

嗯。我运行server.js,所有的工作都很完美,路由,数据库访问,渲染。。。但是当我尝试使用req.session时,出现了一个错误

/node_modules/express-session/index.js:259
      req.session.resetMaxAge();
                  ^
TypeError: Object #<Object> has no method 'resetMaxAge'
    at ServerResponse.end (/node_modules/express-session/index.js:259:19)
    at ServerResponse.res.redirect (/node_modules/express/lib/response.js:724:8)
    at Promise.<anonymous> (/routes/adminpanel/login.js:28:21)
    at Promise.<anonymous> (/node_modules/mpromise/lib/promise.js:177:8)
    at Promise.emit (events.js:95:17)
    at Promise.emit (/node_modules/mongoose/node_modules/mpromise/lib/promise.js:84:38)
    at Promise.fulfill (/node_modules/mongoose/node_modules/mpromise/lib/promise.js:97:20)
    at /Users/arthurbortnik/GitHub/GMX/node_modules/mongoose/lib/query.js:1393:13
    at model.Document.init (/node_modules/mongoose/lib/document.js:250:11)
    at completeOne (/node_modules/mongoose/lib/query.js:1391:10)
谁知道发生了什么事


尊敬的Arthur Borg。

执行此操作时,您正在覆盖会话对象:

req.session = {
  adminpanel: {
    admin   : admin,
    auth    : true
  }
};
我不确定您想在这里实现什么,但这就是您丢失
Express
使用的实际会话对象的地方。github上发布了一个类似的问题,Doug Wilson对此做出了回应

这是你自己的应用程序中的一个bug——你或你正在使用的某个模块是 覆盖req.session(即执行req.session={}或其他操作)。 此模块不支持覆盖req.session,如下所示 req.session需要是具有特定属性的对象


我不知道为什么没有想到这一点。非常感谢。
req.session = {
  adminpanel: {
    admin   : admin,
    auth    : true
  }
};