【问题标题】:express-session excessive MySQL SELECT/UPDATE session callsexpress-session 过多的 MySQL SELECT/UPDATE 会话调用
【发布时间】:2021-06-06 14:06:50
【问题描述】:

我在我的 Node.js 应用程序中使用 express-session 和 sequelize 和 connect-session-sequelize。默认情况下,快速会话记录所有 SQL 调用,这突出了我要解决的问题。通过 res.render('index') 调用视图模板会按预期启动 SELECT 和 UPDATE 调用(如下):

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

但是,在模板中添加链接的标题元素(style/script 标记)或img 标记会导致对每个链接元素的SELECT 和UPDATE 查询的额外调用。因此,添加更多内容将导致数据库调用次数呈指数级增长。

如何防止style、script 和img 调用在express 中发起调用?

app.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}`);
});

index.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") 

【问题讨论】:

  • 你能提供一些代码sn-p吗?
  • 嗨@AkashPatel,我已经用代码更新了这个问题。谢谢。

标签: mysql node.js express-session


【解决方案1】:

该问题是在app.use(session({...}); 之后使用app.use(express.static('./public')); 引起的。希望这可以帮助遇到同样问题的其他人。

【讨论】:

    猜你喜欢
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    相关资源
    最近更新 更多