无法在Mongoose回调中保存

时间:2015-10-13 16:18:34

标签: javascript node.js mongodb mongoose mean-stack

更新:我现在知道这个问题。这是follow-up question

我正在使用Mongoose和MongoDB的MMEAN堆栈。我在TypeError: undefined is not a function上收到save()错误,因为我试图在回调中使用Mongoose保存到MongoDB。我不知道如何正确保存它。

这是我必须遵循的逻辑:

  1. 检查Foo集合是否为空
  2. 如果Foo为空,请保存新的Foo文档
  3. 如果Foo不为空,请不要保存新的Foo文档
  4. 我相信除了有问题的mongoose.model("Foo").save(cb);行之外的其他代码都没有错误。但为了以防万一,我把所有东西都包括在内。我从routes / index.js中调用了save方法addFoo()

    // routes/index.js - No errors here
    router.post('/foo', function(req, res, next){
      var foo = new Foo(req.body);
      foo.addFoo(function(err, bid){
        if(err){ return next(err); }
        res.json(foo);
      });
    });
    
    // models/Foo.js - THE ERROR IS IN HERE
    
    var mongoose = require('mongoose');
    var FooSchema = new mongoose.Schema({
      creator: String
    });
    mongoose.model('Foo', FooSchema);
    
    FooSchema.methods.addFoo = function(cb){
    
      // finds all documents of Foo into the "results" array
      this.model("Foo").find(function(err, results){
        if (err){return err;}
    
        // if the Foo results array is empty
        if (results.length == 0){
    
          // THE LINE BELOW IS WHERE THE ERROR OCCURS
          // mongoose.model("Foo").save(cb);
          //                       ^
          // TypeError: undefined is not a function
          mongoose.model("Foo").save(cb);
          return;
        }
      });
    }
    

    感谢您帮我调试。

1 个答案:

答案 0 :(得分:1)

mongoose.model("Foo").save(cb)是错误的。

您需要一个有效的模型才能使用您定义的架构"Foo"var Foo = new mongoose.model('Foo', FooSchema)

然后,您需要像Foo一样创建模型var test = new Foo({creator:'test'})的实例,然后才能在实例.save()上调用test。< / p>