【发布时间】: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