0

メインで必要な次のようなルートの初期化があるとします。

module.exports = function(app) {
  for (var name in names) {
    var schema = new Schema({})  // schema that accepts anything
      , m = mongoose.model(name, schema)
      , controller = new TextController(m)
    app.get('/path', controller.create.bind(controller))
    // etc, etc

また、TextController は外部で次のように定義されています。

var TextController = function(Model) {
  this.Model = Model
}
TextController.prototype.create = function(req, res) {
  var aDoc = this.Model({   // this is the problematic bit
      title: req.body.title
    , content: req.body.content})
  aDoc.save(function(err) {...})
}

何らかの理由で、タイトルとコンテンツのパラメーターが予想される文字列であっても、mongo はこれを空のドキュメントとして保存します。予想どおり、this.Model はある種のマングース オブジェクトですが、保存またはインスタンス化を拒否しているようです。アイデアや提案はありますか?

注: controller.method.bind(controller) を追加したのは、これが this.Model にアクセスする唯一の方法 (私が知っていた) だったからです。

編集:次のことも試しました:

var TextController = function(myCollection) {
  this.myCollection = myCollection
  this.list = function(req, res) {
    this.myCollection.find({}, function { ... })
  }
}

また、名前を渡して、関数のスコープ内でモデルを初期化しようとしましたfunction(name) { this.myCollection = mongoose.model(name) ... }

4

1 に答える 1