MissingSchema错误:架构尚未注册模型“用户”
每当启动我的应用程序时,我总是收到这个错误:
–MissingSchema错误:架构尚未注册模型“用户” –
我正在从Simon Holmes的“Mongoose for Application Development”一书中学习一个教程。 我在第5章“与数据交互 – 创build”
这是我的代码:
app.js:
var express = require('express') , routes = require('./routes') , user = require('./routes/user') , project = require('./routes/project') , http = require('http') , path = require('path');
db.js:
//Creating the Application Schemas: //==================================== //User Schema: //=============== var userSchema = new mongoose.Schema({ name: String, email: {type: String, unique:true}, createdOn: { type: date, default: date.now }, modifiedOn: Date, LastLogin: Date }); //Build the User Model: //=========================== mongoose.model( 'User', userSchema );
user.js的:
var mongoose = require("mongoose"); var User = mongoose.model( 'User' );
错误的结果:
throw new mongoose.Error.MissingSchemaError(name); ^ MissingSchemaError: Schema hasn't been registered for model "User". Use mongoose.model(name, schema) at Mongoose.Model (C:\Users\New\Desktop\mongoose_pm_app\ mongoosepm\node_modules\mongoose\lib\index.js.311.13) at Object. <anonymous> (C:\Users\New\Desktop\mongoose_pm_app\mongoosepm\routes\user.js:2:21) atModule._compile (module.js:456:26) atObject.Module._extensions..js (module.js:474:10) atModule.load (module.js:356:32) at Function.Module._load (module.js:364:17) at require (module.js:380:17) at Object <anonymous> (C:\Users\New\Desktop\mongoose_pm_app\mongoosepm\app.js:8:12) at Module._compile (module.js:456:26) 25 June 19:52:55 - [nodemon] app crashed waiting for file changes before starting...
我年轻的mongoose和mongodb。 我已经通过书籍勘误表来检查我是否input了错误的内容,但是完全一样。
我也尝试从PACKT下载示例代码,示例代码看起来是一样的。
任何和所有的援助将非常感激。 谢谢。
您需要在您的db.js文件的某个位置,否则其中的代码将永远不会运行,并且架构将永远不会被注册。
另外,我build议你在User.js中定义你的用户模式,并将模型添加到导出中,如下所示:
user.js的
//User Schema: //=============== var userSchema = new mongoose.Schema({ name: String, email: {type: String, unique:true}, createdOn: { type: date, default: date.now }, modifiedOn: Date, LastLogin: Date }); //Build the User Model: //=========================== var User = mongoose.model( 'User', userSchema ); //Exports //======= exports = User;
这允许你只require
其他地方的文件来获得对User模型的引用(而不必通过mongoose.model
来获取它)。 例如:
var User = require('User'); // ... var fred = new User({ ... }); // create a new user fred.save(function (err, user) { ... });
我没有读过你提到的那本书,所以我不确定是否有一个很好的理由在一个文件中定义所有的模式(这就是你看起来像使用db.js的方向) 。 从我所看到的情况来看,每个文件都有一个模式/模型更为常见。
这个错误来自一行:
var User = mongoose.model( 'User' );
你需要提供一个Schema对象给mongoose.model()方法。 第一个参数,“用户”,只是告诉mongoose会收集什么名称。 第二个定义用户模式。
因此,无论是像谢尔盖已经回答,或添加这些几个变化。
到你的db.js,在底部添加export行:
module.exports = userSchema;
然后在User.js中需要它:
var mongoose = require("mongoose"); var userSchema = require("./db.js"); var User = mongoose.model( 'User', userSchema ); module.exports = User;
或者,您可以通过在构build用户模型时导出用户模型来更改架构定义中的最后一行:
//Build the User Model: //=========================== module.exports = mongoose.model( 'User', userSchema );
那么你根本就不需要User.js。
虽然,那么你的文件命名不符合惯例,如果你关心它。
分离模式和模型的好处是当你需要多个复杂的模式时,当你有很多模式插件,所以你想要一个简单的模型文件,你需要所有的。 如果你只有一个简单的模式,我build议你使用单一文件版本。