请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Schema hasn't been registered

你好 我遇到这个问题 不知如何解决 希望大师指点。

Schema hasn't been registered for model "versions"

当我在同一个js文件中引入两个model时会报出上面的错误。

let mongoose = require('mongoose');
let Dream = mongoose.model('dreams');
let Version = mongoose.model('versions');

正在回答

5回答

引入多个 model 这个用法没毛病的,冲突的原因应该不是引入两个 model,而是 model 的注册方法,或者初始化方法里面可能有问题。


有可能是 model 还没有注册完毕,代码里就来调用 model,有可能是 versions 里面暴露的有问题,所以可以先把 versions 代码贴出来看看,先排除掉这个原因

0 回复 有任何疑惑可以回复我~
  • 提问者 lyz0 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-04-03 10:05:43
提问者 lyz0 2018-04-03 10:18:25

感谢回答,根据你的思路 很快排除了两个问题后正常运行了

1.在使用 versionHelper 前要调用 require('../models/version');注册model

2.由于注册Schema的时候mongodb自动在Schema尾部加了 s 我在注册和 引用model的时候 s 没有保持一致

0 回复 有任何疑惑可以回复我~
提问者 lyz0 2018-04-02 15:59:27

因为 userHelper 、versionHelper 只要在同一个文件引用 就会出现以上报错

所以我在想是不是 mongoose.model('users'); mongoose.model('versions');

这两个代码会冲突或者覆盖?

如果是这样,我该如何设计一个 dbhelper 实现共通的db操作呢?

0 回复 有任何疑惑可以回复我~
提问者 lyz0 2018-04-02 15:50:03

好的。上面是没说清楚。  结构很简单的

controllers、 dbhelper 两个层

controllers 实现业务代码      dbhelper 实现 db操作

controllers 层里面有个类 比如实现用户的增、删、查、改等业务操作

在这个controllers里面引用了userHelper用来实现对db的操作

到此 代码运行一切正常。


后来新增了一个需求:需要每个接口 检测版本

所以当前这个类  不但引用了userHelper,还需要引用一个 公用的versionHelper 来检查版本

问题就在这里:出现同时引用 userHelper 和 versionHelper 时 就会报上面的错误

let userHelper = require('../dbhelper/userHelper');
let versionHelper = require('../dbhelper/versionHelper');

两个helper分别引用了  require('mongoose');

userHelper  :

let mongoose = require('mongoose');
let User= mongoose.model('users');


versionHelper   

let mongoose = require('mongoose');
let Version= mongoose.model('versions');


0 回复 有任何疑惑可以回复我~
Scott 2018-04-01 20:22:38

可以把 versions 代码贴出来看一下

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信