存在两个model文件,分别是 users.js 和role.js 现在在users model中引入role model ,出现Schema hasn’t been registered for model “Role” users model 如下形式: var mongoose = require(’…/api/connect.js’); var RoleSchema = require(’./Role.js’).RoleSchema; var Role = mongoose.model(‘roles’, RoleSchema);
exports.UserSchema = new mongoose.Schema({ username: String, password: String, … roleArr:[{ type: mongoose.Schema.Types.ObjectId, ref: ‘Role’ }] });
你的RoleSchema (Role.js)文件呢? require(’./Role’); require(’./User’); exports.Topic=mongoose.model(‘role’); exports.User=mongoose.model(‘user’); 在Model文件夹中的index.js使用以上代码
还有不需要你引入Role模块,ref 的属性值是字符串类型,如果你有建立 role模型 mongoRose 会在你使用populate 方法 通过ref 属性 查找Role模块。
这是Role.js var mongoose = require(‘mongoose’); exports.RoleSchema = new mongoose.Schema({ roleName: String, … }); 没有index.js
我在user的model 中注释了 如下引用代码: var RoleSchema = require(’./Role.js’).RoleSchema; var Role = mongoose.model(‘roles’, RoleSchema);
但是 还是 出现如下出错!! Schema hasn’t been registered for model “Role”.
查询使用如下方法: Users.findOne({username:req.body.username}).populate(‘roleArr’).exec(function(err,doc){ … });
http://mongoosejs.com/docs/index.html 把 mongoosejs 的迅速上手文档仔细看看。 你不需要 new 一个新的Schema. 直接 var RoleSchema = mongoose.Schema({ \你的代码 });
找到问题原因了: 由于将Role model注册到roles 代码如下:var Role = mongoose.model(‘roles’, RoleSchema); 因此ref 的时候 应该写ref:‘roles’ 。