簡體   English   中英

快速會話過多 MySQL SELECT/UPDATE session 調用

[英]express-session excessive MySQL SELECT/UPDATE session calls

我在我的 Node.js 應用程序中使用express-session with sequelizeconnect-session-sequelize 默認情況下,快速會話記錄所有 SQL 調用,這突出了我要解決的問題。 通過 res.render('index') 調用視圖模板會按預期啟動SELECTUPDATE調用(如下):

Executing (default): SELECT `sid`, `expires`, `data` FROM `session` AS `session` WHERE `session`.`sid` = 'T84YX7hvKWmihWPMzT0Cg_97Wao7kCF5';
Executing (default): UPDATE `session` SET `expires`=? WHERE `sid` = ?

但是,在模板中添加鏈接的 header 元素( style / script標簽)或img標簽會導致對每個鏈接元素的SELECTUPDATE查詢的額外調用。 因此,添加更多內容將導致數據庫調用數量呈指數級增長。

如何防止stylescriptimg調用在 express 中發起調用?

應用程序.js

const config    = require('./config');      
const http      = require('http');
const express   = require('express');
const session   = require('express-session');
const Sequelize = require('sequelize');

const sequelize = new Sequelize(
    config.dbDatabase,
    config.dbUser,
    config.dbPassword,
    {
        host    : config.dbHost,
        dialect : config.dbDialect,
        define  : {
            timestamps  : false,
            underscored : true
        }
    }
);

const app = express();

const sequelizeStore = require('connect-session-sequelize')(session.Store);
const sessionStore = new sequelizeStore({
    db: database.sequelize,
    modelKey: 'session'
});

app.set('view engine', 'pug');
app.set('views', './views');

app.use(express.static('./public'));

app.get('/', function(req, res){
    res.render('index'); // pug 
}

const server = http.createServer(app);

server.listen(config.port, () => {
    console.log(`App listening on port: ${config.port}`);
});

指數.pug

doctype html
html
    head
        meta(charset='utf8')
        title example
        link(rel='stylesheet' href='/css/example.css')
        script(src='/js/lib/angular/angular.min.js')
        script(src='/js/lib/angular/angular-resource.min.js')
        script(src='/js/example.min.js')
    body
        H1 Example Template
        img(src= "/img/sample.jpg" alt="Sample image") 

問題是在app.use(express.static('./public')); app.use(session({...});之后使用。希望這可以幫助其他遇到相同問題的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM