javascript - object.save() 不是函数错误

标签 javascript node.js mongodb mongoose

我认为问题与 .save() 的使用有关,并且可能与没有 .save() 方法的对象有关。

/这是调试器输出(我想我不妨澄清一下)/

Debugger listening on port 15454
Server started
events.js:141
      throw er; // Unhandled 'error' event
      ^

TypeError: examBoard.save is not a function
    at /home/ubuntu/workspace/tests/seeds.js:168:23
    at Immediate.Model.$wrapCallback (/home/ubuntu/workspace/tests/node_modules/mongoose/lib/model.js:3336:16)
    at Immediate._onImmediate (/home/ubuntu/workspace/tests/node_modules/mongoose/node_modules/mquery/lib/utils.js:137:16)
    at processImmediate [as _immediateCallback] (timers.js:383:17)


Process exited with code: 1

为了帮助任何人找到实际问题,我使用了 examBoad.save(); 两次(一次在创建所有 examBoards 之后,一次接近程序结束)和 question.save(); 一次,我相信问题出在 examBoard.save();

var mongoose = require("mongoose");
var examBoard = require("./models/examBoard");
var question = require("./models/question");
var user = require("./models/user");

function seedDB() {
  examBoard.remove({}, function(err) {
    if (err) {
      console.log("Could not remove examBoard data" + err);
    } else {
      examBoard.insertMany({
        name: "AQA",
        modules: [{
          name: "a",
          topics: [{
            name: "a1",
          }, {
            name: "a2",
          }, {
            name: "a3",
          }]
        }, {
          name: "b",
          topics: [{
            name: "b1",
          }, {
            name: "b2",
          }, {
            name: "b3",
          }]
        }, {
          name: "c",
          topics: [{
            name: "c1",
          }, {
            name: "c2",
          }, {
            name: "c3",
          }]
        }]
      }, {
        name: "OCR",
        modules: [{
          name: "a",
          topics: [{
            name: "a1",
          }, {
            name: "a2",
          }, {
            name: "a3",
          }]
        }, {
          name: "b",
          topics: [{
            name: "b1",
          }, {
            name: "b2",
          }, {
            name: "b3",
          }]
        }, {
          name: "c",
          topics: [{
            name: "c1",
          }, {
            name: "c2",
          }, {
            name: "c3",
          }]
        }]
      }, {
        name: "EXL",
        modules: [{
          name: "a",
          topics: [{
            name: "a1",
          }, {
            name: "a2",
          }, {
            name: "a3",
          }]
        }, {
          name: "b",
          topics: [{
            name: "b1",
          }, {
            name: "b2",
          }, {
            name: "b3",
          }]
        }, {
          name: "c",
          topics: [{
            name: "c1",
          }, {
            name: "c2",
          }, {
            name: "c3",
          }]
        }]
      });

      examBoard.save();

      question.insertMany({
        content: "<p>This is a question</p><br><img src='https://hd.unsplash.com/photo-1469537053566-3081fd1e0de2'><br><p>This is a bit after the image</p>",
        mark: 6,
        methods: [
          [{
            mark: 1,
            content: "1a"
          }, {
            mark: 2,
            content: "1b"
          }, {
            mark: 3,
            content: "1c"
          }],
          [{
            mark: 1,
            content: "2a"
          }, {
            mark: 2,
            content: "2b"
          }, {
            mark: 3,
            content: "2c"
          }],
          [{
            mark: 1,
            content: "3a"
          }, {
            mark: 2,
            content: "3b"
          }, {
            mark: 3,
            content: "3c"
          }]
        ]
      }, {
        content: "<p>This is a question</p><br><img src='https://hd.unsplash.com/photo-1465311440653-ba9b1d9b0f5b'><br><p>This is a bit after the image</p>",
        mark: 9,
        methods: [
          [{
            mark: 2,
            content: "1a"
          }, {
            mark: 3,
            content: "1b"
          }, {
            mark: 4,
            content: "1c"
          }],
          [{
            mark: 2,
            content: "2a"
          }, {
            mark: 3,
            content: "2b"
          }, {
            mark: 4,
            content: "2c"
          }],
          [{
            mark: 2,
            content: "3a"
          }, {
            mark: 3,
            content: "3b"
          }, {
            mark: 4,
            content: "3c"
          }]
        ]
      }, {
        content: "<p>This is a question</p><br><img src='https://hd.unsplash.com/photo-1467404899198-ccadbcd96b91'><br><p>This is a bit after the image</p>",
        mark: 12,
        methods: [
          [{
            mark: 3,
            content: "1a"
          }, {
            mark: 4,
            content: "1b"
          }, {
            mark: 5,
            content: "1c"
          }],
          [{
            mark: 3,
            content: "2a"
          }, {
            mark: 4,
            content: "2b"
          }, {
            mark: 5,
            content: "2c"
          }],
          [{
            mark: 3,
            content: "3a"
          }, {
            mark: 4,
            content: "3b"
          }, {
            mark: 5,
            content: "3c"
          }]
        ]
      });

      question.save();

      examBoard[0].module[0].topic[0].push(question[0]);
      examBoard[0].module[0].topic[0].push(question[1]);
      examBoard[0].module[0].topic[0].push(question[2]);
      examBoard[0].module[0].topic[1].push(question[0]);
      examBoard[0].module[0].topic[1].push(question[1]);
      examBoard[0].module[0].topic[1].push(question[2]);
      examBoard[0].module[0].topic[2].push(question[0]);
      examBoard[0].module[0].topic[2].push(question[1]);
      examBoard[0].module[0].topic[2].push(question[2]);
      examBoard[0].module[1].topic[0].push(question[0]);
      examBoard[0].module[1].topic[0].push(question[1]);
      examBoard[0].module[1].topic[0].push(question[2]);
      examBoard[0].module[1].topic[1].push(question[0]);
      examBoard[0].module[1].topic[1].push(question[1]);
      examBoard[0].module[1].topic[1].push(question[2]);
      examBoard[0].module[1].topic[2].push(question[0]);
      examBoard[0].module[1].topic[2].push(question[1]);
      examBoard[0].module[1].topic[2].push(question[2]);
      examBoard[0].module[2].topic[0].push(question[0]);
      examBoard[0].module[2].topic[0].push(question[1]);
      examBoard[0].module[2].topic[0].push(question[2]);
      examBoard[0].module[2].topic[1].push(question[0]);
      examBoard[0].module[2].topic[1].push(question[1]);
      examBoard[0].module[2].topic[1].push(question[2]);
      examBoard[0].module[2].topic[2].push(question[0]);
      examBoard[0].module[2].topic[2].push(question[1]);
      examBoard[0].module[2].topic[2].push(question[2]);
      examBoard[0].module[0].topic[0].push(question[0]);
      examBoard[0].module[0].topic[0].push(question[1]);
      examBoard[0].module[0].topic[0].push(question[2]);
      examBoard[0].module[0].topic[1].push(question[0]);
      examBoard[0].module[0].topic[1].push(question[1]);
      examBoard[0].module[0].topic[1].push(question[2]);
      examBoard[0].module[0].topic[2].push(question[0]);
      examBoard[0].module[0].topic[2].push(question[1]);
      examBoard[0].module[0].topic[2].push(question[2]);
      examBoard[0].module[1].topic[0].push(question[0]);
      examBoard[0].module[1].topic[0].push(question[1]);
      examBoard[0].module[1].topic[0].push(question[2]);
      examBoard[0].module[1].topic[1].push(question[0]);
      examBoard[0].module[1].topic[1].push(question[1]);
      examBoard[0].module[1].topic[1].push(question[2]);
      examBoard[0].module[1].topic[2].push(question[0]);
      examBoard[0].module[1].topic[2].push(question[1]);
      examBoard[0].module[1].topic[2].push(question[2]);
      examBoard[0].module[2].topic[0].push(question[0]);
      examBoard[0].module[2].topic[0].push(question[1]);
      examBoard[0].module[2].topic[0].push(question[2]);
      examBoard[0].module[2].topic[1].push(question[0]);
      examBoard[0].module[2].topic[1].push(question[1]);
      examBoard[0].module[2].topic[1].push(question[2]);
      examBoard[0].module[2].topic[2].push(question[0]);
      examBoard[0].module[2].topic[2].push(question[1]);
      examBoard[0].module[2].topic[2].push(question[2]);

      examBoard[1].module[0].topic[0].push(question[0]);
      examBoard[1].module[0].topic[0].push(question[1]);
      examBoard[1].module[0].topic[0].push(question[2]);
      examBoard[1].module[0].topic[1].push(question[0]);
      examBoard[1].module[0].topic[1].push(question[1]);
      examBoard[1].module[0].topic[1].push(question[2]);
      examBoard[1].module[0].topic[2].push(question[0]);
      examBoard[1].module[0].topic[2].push(question[1]);
      examBoard[1].module[0].topic[2].push(question[2]);
      examBoard[1].module[1].topic[0].push(question[0]);
      examBoard[1].module[1].topic[0].push(question[1]);
      examBoard[1].module[1].topic[0].push(question[2]);
      examBoard[1].module[1].topic[1].push(question[0]);
      examBoard[1].module[1].topic[1].push(question[1]);
      examBoard[1].module[1].topic[1].push(question[2]);
      examBoard[1].module[1].topic[2].push(question[0]);
      examBoard[1].module[1].topic[2].push(question[1]);
      examBoard[1].module[1].topic[2].push(question[2]);
      examBoard[1].module[2].topic[0].push(question[0]);
      examBoard[1].module[2].topic[0].push(question[1]);
      examBoard[1].module[2].topic[0].push(question[2]);
      examBoard[1].module[2].topic[1].push(question[0]);
      examBoard[1].module[2].topic[1].push(question[1]);
      examBoard[1].module[2].topic[1].push(question[2]);
      examBoard[1].module[2].topic[2].push(question[0]);
      examBoard[1].module[2].topic[2].push(question[1]);
      examBoard[1].module[2].topic[2].push(question[2]);

      examBoard[2].module[0].topic[0].push(question[0]);
      examBoard[2].module[0].topic[0].push(question[1]);
      examBoard[2].module[0].topic[0].push(question[2]);
      examBoard[2].module[0].topic[1].push(question[0]);
      examBoard[2].module[0].topic[1].push(question[1]);
      examBoard[2].module[0].topic[1].push(question[2]);
      examBoard[2].module[0].topic[2].push(question[0]);
      examBoard[2].module[0].topic[2].push(question[1]);
      examBoard[2].module[0].topic[2].push(question[2]);
      examBoard[2].module[1].topic[0].push(question[0]);
      examBoard[2].module[1].topic[0].push(question[1]);
      examBoard[2].module[1].topic[0].push(question[2]);
      examBoard[2].module[1].topic[1].push(question[0]);
      examBoard[2].module[1].topic[1].push(question[1]);
      examBoard[2].module[1].topic[1].push(question[2]);
      examBoard[2].module[1].topic[2].push(question[0]);
      examBoard[2].module[1].topic[2].push(question[1]);
      examBoard[2].module[1].topic[2].push(question[2]);
      examBoard[2].module[2].topic[0].push(question[0]);
      examBoard[2].module[2].topic[0].push(question[1]);
      examBoard[2].module[2].topic[0].push(question[2]);
      examBoard[2].module[2].topic[1].push(question[0]);
      examBoard[2].module[2].topic[1].push(question[1]);
      examBoard[2].module[2].topic[1].push(question[2]);
      examBoard[2].module[2].topic[2].push(question[0]);
      examBoard[2].module[2].topic[2].push(question[1]);
      examBoard[2].module[2].topic[2].push(question[2]);

      examBoard.save();
      console.log("Done seeding");
    }
  });
}

module.exports = seedDB;
examBoard 模型
var mongoose = require("mongoose");

var topicSchema = new mongoose.Schema({
  name: String,
  questions: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: "question"
  }],
});

var moduleSchema = new mongoose.Schema({
  name: String,
  topics: [topicSchema]
});

var examBoardSchema = new mongoose.Schema({
  name: String,
  modules: [moduleSchema]
});


module.exports = mongoose.model("examBoard", examBoardSchema);

最佳答案

require 实现了单例模式,在 mongoose 中,当 require 一个模型时,需要实例化一个新对象,如下所示:

var exam = new examBoard(request.body); // request.body can to contain the values of the schema structure
exam.save();

关于javascript - object.save() 不是函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39756275/

相关文章:

javascript - Async Await 和 Promises - 如何改进语法

javascript - 禁用一个 HTML 页面中的所有 JavaScript 和 jQuery

node.js - Nodejs加载javascript和图像问题

MongoDB 和类似的数据库技术

mongodb - 在MongoDB的查询中, "center" "radius"是什么单位?

javascript - 花在 "ObserveChanges"上的响应时间长 | meteor js

javascript - VueRouter 不滚动到 anchor 标签

javascript - 在 node.js "request.on"这是什么 ".on"

node.js - @angular/cli : 1. 4.1 Angular 生成组件但它返回 home.component.css

javascript 使用非内联函数