javascript - 缺少架构错误 : Schema hasn't been registered for model "User"

标签 javascript node.js mongodb mongoose

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

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

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

这是我的代码:

应用程序.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 );

用户.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 还很陌生。 我浏览了书籍的勘误表页面 检查我是否输入错误,但它与此处完全相同。

我也试过从PACKT下载示例代码,示例代码 看起来一样。

如有任何帮助,我们将不胜感激。 谢谢。

最佳答案

您需要在某个地方require您的 db.js 文件,否则其中的代码将永远不会运行,并且永远不会注册架构。

此外,我建议您在 User.js 中定义您的用户架构并将模型添加到导出,如下所示:

用户.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)。据我所知,每个文件有一个模式/模型更为常见。

关于javascript - 缺少架构错误 : Schema hasn't been registered for model "User",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24420995/

相关文章:

javascript - 循环显示下一项

javascript - fullpage.js - 如果 'scrolloverflow' 设置为 true 则无法向下滚动到下一部分

node.js - 将对象转换为字符串并带入必要的形式

node.js - Sails mongo 重新连接

java - Spring data Mongo 中用户聚合时排序不起作用

Javascript - 将类型化数组保存为 blob 并作为二进制数据读回

javascript - 提高渲染性能

node.js - 使用 AWS CodePipeline 在 AWS ElasticBeanstalk 上部署 AdonisJS 应用程序失败 - 缺少 .env

android - 如何使用 Retrofit2 上传图片并将其保存在 NodeJS 服务器上?

javascript - MongoDB 和 Nest.js : Define a custom name for a collection