簡體   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