14

ごあいさつ!

以下のようにMongooseスキーマを定義し、モデル(InventoryItemModel)を登録しました。スキーマのカスタム コンストラクター関数を作成して、モデルからオブジェクトをインスタンス化するときに関数が呼び出されるようにする方法はありますか (たとえば、データベースから値を持つオブジェクトを読み込むため)。

var mongoose = require('mongoose')
  , Schema = mongoose.Schema

var InventoryItemSchema = new Schema({
    Sku : String
  , Quanity : Number
  , Description : String
  , Carted : []
  , CreatedDate  : {type : Date, default : Date.now}
  , ModifiedDate  : {type : Date, default : Date.now}
});

mongoose.model('InventoryItem', InventoryItemSchema);

var item = new InventoryItem();

インスタンス化時に項目がデータベースから取り込まれるように、カスタム コンストラクター関数を追加できますか?

4

5 に答える 5

14

行きたい方向に応じて、次のことができます。

1) フックを使用する

モデルが初期化、検証、保存、および削除されると、フックが自動的にトリガーされます。これが「インサイドアウト」ソリューションです。ここでドキュメントを確認できます:

2) スキーマの静的作成関数を作成します。

静的はモデル オブジェクトに存在し、新しいモデルの作成などの機能を置き換えるために使用できます。ステップに追加のロジックがある場合createは、静的関数で自分で記述できます。これが「アウトサイドイン」ソリューションです。

于 2013-01-09T05:57:46.570 に答える
2

私は自分でこの問題に遭遇し、あなたの問題を解決するのに役立つマングースプラグインを書きました

var mongoose = require('mongoose')
  , Schema = mongoose.Schema
  , construct = require('mongoose-construct')

var user = new Schema({})
user.plugin(construct)

user.pre('construct', function(next){
    console.log('Constructor called...')
    next()
})

var User = mongoose.model('User', user)
var myUser = new User(); // construct hook will be called

レポは次のとおりです (npm でも利用できます): https://github.com/IlskenLabs/mongoose-construct

于 2013-06-04T17:30:09.203 に答える