Я использую [email protected] Я хотел бы изменить категорию сообщения на древовидную структуру. Ниже код работает хорошо, за исключением, когда я создаю категорию, он идет в тупик:Mongoose pre.save() async middleware не работает над созданием записи
var keystone = require('keystone'),
\t Types = keystone.Field.Types;
/**
* PostCategory Model
* ==================
*/
var PostCategory = new keystone.List('PostCategory', {
\t autokey: { from: 'name', path: 'key', unique: true }
});
PostCategory.add({
\t name: { type: String, required: true },
\t parent: { type: Types.Relationship, ref: 'PostCategory' },
\t parentTree: { type: Types.Relationship, ref: 'PostCategory', many: true }
});
PostCategory.relationship({ ref: 'Post', path: 'categories' });
PostCategory.scanTree = function(item, obj, done) {
\t if(item.parent){
\t \t PostCategory.model.find().where('_id', item.parent).exec(function(err, cats) {
\t \t \t if(cats.length){
\t \t \t \t obj.parentTree.push(cats[0]);
\t \t \t \t PostCategory.scanTree(cats[0], obj, done);
\t \t \t }
\t \t });
\t }else{
\t \t done();
\t }
}
PostCategory.schema.pre('save', true, function (next, done) { //Parallel middleware, waiting done to be call
\t if (this.isModified('parent')) {
this.parentTree = [];
\t \t if(this.parent != null){
\t \t \t this.parentTree.push(this.parent);
\t \t \t PostCategory.scanTree(this, this, done);
\t \t }else
\t \t \t process.nextTick(done);
}else
\t \t process.nextTick(done); //here is deadlock.
next();
});
PostCategory.defaultColumns = 'name, parentTree';
PostCategory.register();
Спасибо так много.