繁体   English   中英

Express-Session中的对象方法

[英]Object method in Express-Session

目前,我正在尝试将对象与快速会话链接。
有我的代码:

var express = require('express');
var session = require('express-session');

// I have an object named "engine", which is a fake SQL Object connection (for example)
// this is my engineFactory (which return an engine when function "giveMeObject" is called).
var engineFactory = require('./tools/engineFactory');
var eF = new engineFactory();

// create my app
var port = 3030;
var app = express();

app.use(session({
    secret: "secret"
}));

app.get('/', function(req, res) {
    // Req.session.engine will contains an SQL connection
    req.session.engine = eF.giveMeObject();
    res.send('object gived : ' + req.session.engine); // return "object gived : [object Object]", so ok.
});

app.get('/session', function(req, res) {
    // Here I verify if my engine still exists
    res.send("Coming From Session: " + req.session.engine); // return "Coming From Session: [object Object]" so, ok.
});

app.get('/session-test', function(req, res) {
    // Here I 
    res.send(Object.getOwnPropertyNames(req.session.engine)); // return ["attributeA","attributeB"], so where is my connectMe() ?
    req.session.engine.connectMe(); // error : "req.session.engine.connectMe is not a function"
});

app.listen(port);
console.log('app listen to ' + port);

所以,我的问题是,我想将对象链接到会话(通常是SQL连接对象)。 并在“无处不在”重复使用该对象以执行查询等。但是当我尝试使用函数时,出现以下错误消息:
“ req.session.engine.connectMe不是函数”

仅供参考,我的引擎对象和引擎工厂代码:
发动机

function engine(){
    this.attributeA = "aaa";
    this.attributeB = "bbb";
};

engine.prototype.connectMe = function(){
    return this.attributeA + this.attributeB;
};

module.exports = engine;

引擎工厂

var engine = require('./engine');

function engineFactory() {

};

engineFactory.prototype.giveMeObject = function() {
    return new engine;
};

module.exports = engineFactory;

正如我所说,目标是将SQL连接与用户会话链接在一起。 该连接被提供给用户,然后,该应用程序重新使用该用户的连接向数据库进行查询(关于这一点,我知道池连接模式更好,但这是该项目的要求,原因有很多) 。
但是目前我无法重用该对象的方法...

谢谢您的帮助。

大多数后备会话存储区不能/不序列化复杂的类型,例如函数。 许多商店会简单地在会话数据上调用JSON.stringify()存储,这将隐式删除函数和其他复杂类型,或者会将它们转换为其他类型,例如普通对象或字符串(取决于关于对象上.toJSON() / .toString()的可用性)。

您将需要重新创建engine实例才能访问函数和其他不可序列化的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM