javascript - 'this' 在 Mongoose 中间件期间为空
问题描述
很长一段时间的 Java 程序员在这里试图弄清楚 Node.js
我正在尝试使用 pre 中间件将删除级联到子对象,但没有发生子删除,而父级删除顺利。让我的数据库充满悲伤的孤儿。当我开始登录控制台时,我看到对“this”的引用是空的。在大多数情况下,这似乎是使用 ==> 创建函数的问题,但我没有这样做:
游戏会话(父):
var mongoose = require('mongoose');
var TimeLineEvent = require('../models/timelineevent');
//Define a schema
var Schema = mongoose.Schema;
var GameSessionSchema = new Schema({
name: {type: String, required: true},
gameMasterId : {type: Schema.Types.ObjectId, ref: 'GameMaster', required: true},
});
GameSessionSchema.pre('findOneAndDelete', function(next) {
console.log('GameSessionSchema.pre findOneAndDelete this ='+this);
console.log('GameSessionSchema.pre findOneAndDelete id ='+this._id);
TimeLineEvent.deleteMany({gameSessionId: this._id}).exec();
next();
});
//Export function to create "SomeModel" model class
module.exports = mongoose.model('GameSessionModel', GameSessionSchema );
时间线事件(子):
//Require Mongoose
var mongoose = require('mongoose');
//Define a schema
var Schema = mongoose.Schema;
var TimeLineEventSchema = new Schema({
name: {type: String, required: true},
gameSessionId: {type: Schema.Types.ObjectId, ref: 'GameSession', required: true},
time: {type: Number, required: true},
nextAction: {type: Number}
});
module.exports = mongoose.model('TimeLineEventModel', TimeLineEventSchema );
这是调用 pre 方法时控制台显示的内容:
GameSessionSchema.pre findOneAndDelete this =[object Object]
GameSessionSchema.pre findOneAndDelete id =undefined
你能看到我错过了什么吗?谢谢!
解决方案
来自文档:“在查询中间件功能中,this
指的是查询。”
如果您使用console.log(this)
,您将能够查看完整的 Query 对象。您可能会找到this.model
所需的参考资料。
推荐阅读
- r - 构建 CRAN XML v3.98-1.10 时“无法加载 XML.dll”
- c - 如何在 JNA 和 C 之间对齐内存
- api - 使用 BitBucket API,列出哪些分支在 master 中有所有内容,哪些没有
- c# - 如何在 C# 中使用带有公共 asc 密钥的 BouncyCastle 加密纯文本/字符串?
- python - (Py)OpenCL 同时修改所有线程的值
- c# - XamDataGrid 中的 XamComboBoxField 为空
- jquery - 内联的宏伟弹出窗口!使用 animate.css
- java - 如何构建仅使用 for 循环列出一串阶乘的代码?
- jenkins - 获取上次成功定时器链接的链接
- php - 不确定“'PDOStatement' 的序列化”在哪里发生?