簡體   English   中英

'this' 在 Mongoose 中間件期間為空

[英]'this' is empty during Mongoose middleware

很長一段時間 Java 程序員在這里試圖弄清楚 Node.js

我正在嘗試使用預中間件將刪除級聯到子對象,但是沒有發生子對象刪除,而父對象則順利刪除。 讓我的數據庫充滿悲傷的孤兒。 當我開始登錄到控制台時,我看到對“this”的引用是空的。 對於大多數情況,這似乎是使用 ==> 創建 function 的問題,但我沒有這樣做:

游戲會話(父):

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) ,您將能夠查看完整的查詢 object。您可能會發現this.model引用了您需要的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM