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

Node.js passport.deserializeUser为每个HTTP请求执行DB(sequelize)命令,node.js,sequelize.js,passport.js,Node.js,Sequelize.js,Passport.js,我使用sequelize作为ORM和passport.js(passport local)进行身份验证。我注意到每个HTTP请求都会产生一个单独的数据库命令。我开始研究反序列化user()函数 加载单个页面时,我得到的结果如下: 执行:从用户中选择*其中用户id=1限制1 一遍又一遍 GET/200 12毫秒-780秒 执行:从用户中选择*其中用户id=1限制1 执行:从用户中选择*其中用户id=1限制1 一遍又一遍 GET/js/ui.js 304 4ms 一遍又一遍 GET/styleshe

我使用sequelize作为ORM和passport.js(passport local)进行身份验证。我注意到每个HTTP请求都会产生一个单独的数据库命令。我开始研究反序列化user()函数

加载单个页面时,我得到的结果如下:

执行:从
用户
中选择*其中
用户
id
=1限制1

一遍又一遍

GET/200 12毫秒-780秒

执行:从
用户
中选择*其中
用户
id
=1限制1

执行:从
用户
中选择*其中
用户
id
=1限制1

一遍又一遍

GET/js/ui.js 304 4ms

一遍又一遍

GET/stylesheets/main.css 304 6ms

执行:从
用户
中选择*其中
用户
id
=1限制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文件运行?如果是这样,有没有办法减少对数据库的请求数量?

这是中间件顺序不正确的典型结果。您应该
app。在
app之前,使用
(或同等)处理静态资源的中间件(通常是
express.static
connect.static
)。使用
Passport中间件。其他中间件也一样,它们处理不需要通过Passport运行的请求


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

很好的解决方案,我有一个关于这个问题的变体,并在这里发布了一个问题