我想为模型编写一些实例/静态方法,它使用mongoose的API并在使用mongoose的API之前和之后做一些事情。
例如,我编写自己的Article.createArticle
方法,它会在Article.create
之前检查数据,并在创建后返回article.toObject()
。
这就是我希望createArticle
工作的方式:
Article.createArticle({someKeys: 'SomeData', ...})
.then(obj => {
// get plain object here
});
我试着写这样的东西:
Article.Schema.static({
createArticle: function(data) {
return new Promise(function(resolve, reject){
checkDataKeys(data);
resolve(mongoose.model('Article').create(data)
.then(article => resolve(article.toObject()));
);
});
},
});
使用此createArticle
,我只在undefined
中获得then
,
我必须犯错。
此外,除了使createArticle
工作之外,还有什么办法可以让代码更优雅吗?
感谢。
答案 0 :(得分:3)
我自己找到了适合我的方法。虽然我不太了解这种机制,但也许我会在以后尝试解决这个问题......
ArticleSchema.static({
createArticle: function(data) {
checkDataKeys(data); // pre works
return mongoose.model('Article').create(data)
.then(obj => {
return obj.toObject(); // afterworks
// here, just get the plain obj from doc
// and *return* it
});
},
});
更新:在我搜索了一些关于Promise的内容之后,也许这会更好。
ArticleSchema.static({
createArticle: function(data) {
checkDataKeys(data); // pre works
return mongoose.model('Article').create(data)
.then(obj => {
return Promise.resolve(obj.toObject());
// Some say that this is totally same as directly return
})
.catch(err => {
return Promise.reject(err);
// if error, this will ensure the err will be caught
// for some async cases
});
},
});