[英]Persisting login states with passport.js, mysql, and express-session
[英]express-session excessive MySQL SELECT/UPDATE session calls
我在我的 Node.js 應用程序中使用express-session with 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` = ?
但是,在模板中添加鏈接的 header 元素( style
/ script
標簽)或img
標簽會導致對每個鏈接元素的SELECT
和UPDATE
查詢的額外調用。 因此,添加更多內容將導致數據庫調用數量呈指數級增長。
如何防止style
、 script
和img
調用在 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.