2017-09-02 5 views
0

mongooseのAPIを使用し、mongooseのAPIを使う前と後に何かするインスタンス/静的メソッドをモデルに書きたいと思っています。Mongoose:約束した独自のメソッドを書く

たとえば、私は自分でArticle.createArticleメソッドを書いて、Article.createの前にデータをチェックし、作成後にarticle.toObject()を返します。

これは私が私のcreateArticle作品たい方法です:私は取得する必要がありますthenでこのcreateArticle、私だけを取得undefined、 と

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())); 
      ); 
     }); 
    }, 
}); 

:私はこのような何かを書き込もうとしました

Article.createArticle({someKeys: 'SomeData', ...}) 
    .then(obj => { 
     // get plain object here 
    }); 

を何か問題でも。

また、createArticleの作業に加えて、コードをよりエレガントにする方法はありますか?

ありがとうございました。

答えて

2

私は自分のために働く方法を見つけました。私は非常にメカニズムを理解していないよけど、多分私は...後でその上で動作するように

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 
       }); 
    }, 
}); 

アップデートを試してみましょう:私は約束について何かを検索した後、多分これは良いかもしれません。

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 
       }); 
    }, 
}); 
関連する問題