【发布时间】:2020-09-30 00:15:00
【问题描述】:
我正在开发一个具有多种用户的 nodejs 应用程序,例如“用户”和“页面”。我正在使用 MongoDB 来保存我的数据,并使用 passportjs 进行身份验证。我需要根据用户类型提供不同的序列化方法。示例代码:
passport.serializeUser((obj, done) => {
if (obj instanceof User) {
console.log("serialising user", obj);
done(null, { id: obj._id, type: 'user' });
} else if (obj instanceof Page) {
console.log("serialising page", obj);
done(null, { id: obj._id, type: 'page' });
}
});
这里的问题是instanceof 不适用于从 MongoDB 检索的文档。它们是使用用户/页面的构造函数创建的,但现在我无法区分它们,因为它们现在都是对象类型。我该如何处理?
【问题讨论】:
-
为什么不使用数据库中的字段 userType 并保存值“用户”或“页面”,然后从文档中检查该字段?
-
文档已经在不同的集合中,所以我不需要在任何其他上下文中区分它们。我认为这可能是一个解决方案,但我不喜欢它的冗余。在所有类型为“user”的用户集合中拥有 10,000 个用户似乎并不是最好的解决方案。
-
@Ismail K. Wahdan 从这两个不同的集合中找到一个唯一字段,并根据字段和字段值应用此逻辑
-
@kavigun 是的,另一种选择,更简单
标签: javascript node.js mongodb passport.js bson