繁体   English   中英

MissingSchema错误:尚未为模型“ User”注册架构

[英]MissingSchema Error: Schema hasn't been registered for model “User”

每当我启动应用程序时,我都会不断收到此错误:

--MissingSchema错误:尚未为模型“用户”注册架构-

我正在使用Simon Holmes撰写的“ Mongoose for Application Development”一书中的教程。 我在第5章“与数据交互-创建”

这是我的代码:

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...

我还年轻到猫鼬和mongodb。 我已经浏览了勘误表页面,以检查是否输入了与此处相同的错误内容。

我还尝试从PACKT下载示例代码,该示例代码看起来相同。

任何和所有协助将不胜感激。 谢谢。

您需要require您db.js文件的某个地方,否则在它的代码永远不会运行,该模式将永远不会被注册。

另外,我建议您在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' );

您需要为mongoose.model()方法提供一个Schema对象。 第一个参数“用户”仅告诉猫鼬该集合的名称。 第二个定义用户架构。

因此,要么做像谢尔盖(Sergey)回答的事情,要么添加这些少量更改。

在您的db.js中,在底部添加导出行:

module.exports = userSchema;

然后在User.js中要求它:

var mongoose = require("mongoose");
var userSchema = require("./db.js");
var User = mongoose.model( 'User', userSchema );
module.exports = User;

另外,您可以通过在构建模型时导出用户模型来更改模式定义中的最后一行:

//Build the User Model:
//===========================
module.exports = mongoose.model( 'User', userSchema );

然后,您根本不需要User.js。

但是,如果您在意文件命名,则不会遵循约定。

将模式和模型分开的优势在于,当您需要多个复杂的模式时,当您有许多模式插件时,您需要一个更简单的模型文件来满足所有这些需求。 如果您只有上述的简单架构,建议您使用单文件版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM