反序列化每个请求?这不是不必要的数据库读取吗?

deserialize on each request? is this not needless db reads?

Understanding passport serialize deserialize

在从一系列指南和 SO 帖子中拼凑我的第一个节点应用程序时,我现在偶然发现了序列化和反序列化护照功能...

我有点了解它们的功能..但似乎有些地方不对。

http://toon.io/understanding-passportjs-authentication-flow/:

passport.deserializeUser is invoked on every request by passport.session. It enables us to load additional user information on every request. This user object is attached to the request as req.user making it accessible in our request handling.

这意味着每个请求都运行一个数据库请求来检索用户对象?我的应用程序绝对不需要数据库请求来获取每个请求的完整用户对象。事实上,我想不出需要这个的应用程序..

因此,如果我只注册一个序列化函数而不是反序列化函数..这是停止将整个用户 object/mongo 文档分配给会话同时减少数据库读取的最佳实践吗每个 page/api 个请求计数?

passport.session 是实际调用反序列化函数的中间件,因此更好的策略是战略性地将中间件放在您想要的位置:

app.get('/', ...);
app.use(passport.session());
app.get('/user', ...)

这样您就可以选择加载或不加载用户对象的路由。

但通常的做法是在每次请求时从数据库中恢复用户对象。成本几乎没有(~1ms)所以我不会真的担心它。