passport.deserializeUser为每个HTTP请求执行一个DB(sequelize)命令

我使用sequelize作为ORM和passport.js(passport-local)进行身份validation。 我注意到每个HTTP请求都会产生一个单独的数据库命令。 我开始看deserializeUser()函数。

当加载一个单一的页面,这是我得到的:

执行:SELECT * FROM Users WHERE Usersid = 1 LIMIT 1;

一遍一遍又一遍!

GET / 200 12ms – 780

执行:SELECT * FROM Users WHERE Usersid = 1 LIMIT 1;

执行:SELECT * FROM Users WHERE Usersid = 1 LIMIT 1;

一遍一遍又一遍!

GET /js/ui.js 304 4ms

一遍一遍又一遍!

GET /stylesheets/main.css 304 6ms

执行:SELECT * FROM Users WHERE Usersid = 1 LIMIT 1;

一遍一遍又一遍!

GET /images/logo.jpg 304 3ms

以下是passport.deserializeUser的外观:

 passport.deserializeUser(function(id, done) { User.find(id).success(function(user) { console.log('Over and over and over!'); done(null, user); }).error(function(err) { done(err, null); }); }); 

我要求的页面是:

 index: function(req, res) { res.render('index', { title: "Welcome to EKIPLE!", currentUser: req.user }); } 

是反序列化用户应该运行的每个图像,html,css文件请求? 如果是这样,有没有办法减less对数据库的请求数量?

这是不正确的中间件订单的典型结果。 在使用Passport中间件之前,您应该app.use (或等效的)处理静态资源的中间件(通常为express.staticconnect.static )。 其他处理不需要通过Passport运行的中间件也是如此。

这样,对静态资源的请求将永远不会碰到Passport中间件,所以不会导致那些不必要的数据库请求。