【问题标题】:Mongoose model TypeError: Schema is not a constructorMongoose 模型 TypeError:Schema 不是构造函数
【发布时间】:2019-03-12 21:25:27
【问题描述】:

我看过这个问题: mongoose TypeError: Schema is not a constructor

但是我仍然不能在 Mongoose 中使用模型。

当我尝试这个时:

const mongoose = require('mongoose').connect(`mongodb://${process.env.DB_USER}:${process.env.DB_PASSWORD}@localhost:27017/${process.env.DB_NAME}`, {useNewUrlParser: true});
  const Schema = mongoose.Schema;

  var blogSchema = new Schema({
    title:  String,
    author: String,
    body:   String,
    comments: [{ body: String, date: Date }],
    date: { type: Date, default: Date.now },
    hidden: Boolean,
    meta: {
      votes: Number,
      favs:  Number
    }
  });

  var Blog = mongoose.model('Blog', blogSchema);

我收到以下错误:

TypeError: Schema is not a constructor
    at module.exports (/Users/razbuchnik/Projects/taxi4you/server/resources/permissions/api/v1-update.js:30:20)
    at Layer.handle [as handle_request] (/Users/razbuchnik/Projects/taxi4you/server/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/razbuchnik/Projects/taxi4you/server/node_modules/express/lib/router/route.js:137:13)
    at /Users/razbuchnik/Projects/taxi4you/server/app/middlewares/permission.js:27:7
    at /Users/razbuchnik/Projects/taxi4you/server/node_modules/mongojs/lib/collection.js:50:5
    at runInAsyncScope (/Users/razbuchnik/Projects/taxi4you/server/node_modules/mongojs/lib/cursor.js:198:5)
    at /Users/razbuchnik/Projects/taxi4you/server/node_modules/mongojs/lib/cursor.js:205:5
    at handleCallback (/Users/razbuchnik/Projects/taxi4you/server/node_modules/mongojs/node_modules/mongodb/lib/utils.js:120:56)
    at /Users/razbuchnik/Projects/taxi4you/server/node_modules/mongojs/node_modules/mongodb/lib/cursor.js:683:5
    at handleCallback (/Users/razbuchnik/Projects/taxi4you/server/node_modules/mongojs/node_modules/mongodb-core/lib/cursor.js:171:5)
    at nextFunction (/Users/razbuchnik/Projects/taxi4you/server/node_modules/mongojs/node_modules/mongodb-core/lib/cursor.js:691:5)
    at /Users/razbuchnik/Projects/taxi4you/server/node_modules/mongojs/node_modules/mongodb-core/lib/cursor.js:602:7
    at queryCallback (/Users/razbuchnik/Projects/taxi4you/server/node_modules/mongojs/node_modules/mongodb-core/lib/cursor.js:232:18)
    at /Users/razbuchnik/Projects/taxi4you/server/node_modules/mongojs/node_modules/mongodb-core/lib/connection/pool.js:469:18
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

注意:这是来自 Mongoose 官方网站和 GitHub 存储库的副本。

【问题讨论】:

  • 尽量不要mongoose.connect,把connect放到自己的变量上

标签: node.js mongodb mongoose


【解决方案1】:

问题是mongoose不是Mongoose对象而是connect promise

应该是:

const mongoose = require('mongoose')
const Schema = mongoose.Schema;

mongoose.connect(`mongodb://${process.env.DB_USER}:${process.env.DB_PASSWORD}@localhost:27017/${process.env.DB_NAME}`, {useNewUrlParser: true});

注意mongoose.connect 可能不适合模型,而是父模块,因为可能有多个模型模块。

【讨论】:

    【解决方案2】:

    如果其他人有问题但仍然无法解决,可能在您的模型文件中,而不是 module.exports=,也许您有 module.export=

    这可能对操作没有帮助,但让我痛苦了 30 分钟,因此将其粘贴在这里。

    【讨论】:

      【解决方案3】:

      错误是因为您的const mongoose 具有mongoose.connect 的实例而不是mongoose

      试试这个:

      const mongoose = require('mongoose');
      const connect = mongoose.connect(`mongodb://${process.env.DB_USER}:${process.env.DB_PASSWORD}@localhost:27017/${process.env.DB_NAME}`, {useNewUrlParser: true});
        const Schema = mongoose.Schema;
        var blogSchema = new Schema({
          title:  String,
          author: String,
          body:   String,
          comments: [{ body: String, date: Date }],
          date: { type: Date, default: Date.now },
          hidden: Boolean,
          meta: {
            votes: Number,
            favs:  Number
          }
        });
      
        var Blog = mongoose.model('Blog', blogSchema);
      

      希望对你有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-29
        • 1970-01-01
        • 2016-12-12
        • 2017-03-09
        • 1970-01-01
        • 2022-06-11
        • 2017-04-08
        • 2019-05-09
        相关资源
        最近更新 更多