首页 > 解决方案 > throw new mongoose.Error.MissingSchemaError(name) MissingSchemaError: Schema 尚未注册模型“superheros”

问题描述

当我在 nodemon 上更新我的服务器时出现此错误。

C:\Users\mikae\Desktop\Project\node-express-swig-mongo\node_modules\mongoose\lib\index.js:523
      throw new mongoose.Error.MissingSchemaError(name);
      ^

MissingSchemaError: Schema hasn't been registered for model "superheros".
Use mongoose.model(name, schema)
    at Mongoose.model (C:\Users\mikae\Desktop\Project\node-express-swig-mongo\node_modules\mongoose\lib\index.js:523:13)
    at Object.<anonymous> (C:\Users\mikae\Desktop\Project\node-express-swig-mongo\routes\api.js:4:26)
    at Module._compile (internal/modules/cjs/loader.js:1015:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1035:10)
    at Module.load (internal/modules/cjs/loader.js:879:32)
    at Function.Module._load (internal/modules/cjs/loader.js:724:14)
    at Module.require (internal/modules/cjs/loader.js:903:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Object.<anonymous> (C:\Users\mikae\Desktop\Project\node-express-swig-mongo\app.js:6:11)
    at Module._compile (internal/modules/cjs/loader.js:1015:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1035:10)
    at Module.load (internal/modules/cjs/loader.js:879:32)
    at Function.Module._load (internal/modules/cjs/loader.js:724:14)
    at Module.require (internal/modules/cjs/loader.js:903:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Object.<anonymous> (C:\Users\mikae\Desktop\Project\node-express-swig-mongo\bin\www:7:11)
[nodemon] app crashed - waiting for file changes before starting...

api.js

var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var Superhero = mongoose.model('superheros');


router.get('/superheros', function(req, res) {
  Superhero.find(function(err, superheros){
    console.log(superheros)
    res.render(
      'api',
      {title : 'Superhero API', superheros : superheros}
    );
  });
});

router.post('/superheros', function(req, res) {
  console.log(req.body.name);
  res.redirect('/api/superheros');
});

module.exports = router;

database.js

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

var Superhero = new Schema(
  {name : String}
);

mongoose.model('superheros', Superhero);

mongoose.connect('mongodb://localhost/node-superhero');

我正在使用 Mongoose、Node 和 Express 构建 Crud。当我在 api.js 上编写方法 POST 时出现此错误,甚至擦除错误仍然存​​在。我正在学习本教程 https://mherman.org/blog/node-express-swig-mongo-primer/

标签: javascriptnode.jsmongodbexpressmongoose

解决方案


对您的问题的简短回答是您没有在 database.js 中导出架构

你应该做:

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

var superheroSchema = new Schema(
  {name : String}
);

module.exports = mongoose.model('Superhero', superheroSchema);

此外,最好在不同的文件中分离与数据库的连接,或者至少在主文件中使用它,如下所示:

mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true })
.then(//Some code here...)
.catch(error => handleError(error));

在模型定义中尝试连接数据库是完全错误的。

并且在需要架构时使用:

var Superhero = require('{path to the file containing the schema}')

推荐阅读