我使用express-session包来处理express中的会话。我使用mongoose和connect-mongo将会话存储在 mongodb 中以进行快速会话存储。
当express-session创建的会话过期时,我试图从我的集合中删除一些项目。通常,如果我自己创建了这个模型,我会使用类似的东西:
// Init schema
const schema = new Schema({<schema fields>});
// Add .pre hook
schema.pre('remove', function pre(cb) {
this.model('<Some items linked to this model>').remove({ <some association field>: this._id }, cb);
});
// Create model from schema
export const Model = model('ModelName', schema);
所以现在当记录被删除时(我假设它到期)我也可以删除所有链接的项目。
问题是我不知道如何访问由express-session或connect-mongo创建的模式/模型以向此“会话”模式/模型添加挂钩。
这是我目前使用mongoose和express-sessions进行会话的第一个项目,所以我不太确定如何创建会话模型并将其提供给 mongodb,但是在建立 mongo 连接后,我可以在数据库(cloud.mongodb.com),所以我假设在某些时候“会话”模型是由express-session或connect-mongo创建的,但我找不到如何访问它来添加一些钩子。
同样奇怪的是,如果我在初始化后很长时间(以及在创建第一个会话之后)尝试在 mongoose 中查看所有定义的模型,如下所示:console.log(mongoose.models);
我只能看到我定义的模型,但没有显示“会话”模型。
编辑:我可以通过创建一些作业来解决这个问题,该作业通过迭代每个项目来删除没有现有链接的所有记录,但考虑到猫鼬中有可用的钩子,我认为这不是非常理想的方法。