由于模块加载顺序,Mean.js Schema错误

时间:2016-06-21 17:05:21

标签: javascript mean-stack meanjs

我正在学习MEAN堆栈,我还是比较新的。我有一个使用Mean.io构建的小应用程序,我正在尝试将其移至Mean.js,因为该平台似乎更加维护。

事情进展顺利,但我遇到了障碍,我需要一些见解......

我的核心自定义模块包含我的应用程序的大部分功能,取决于Mean.js包含的用户模块,以扩展用户的Express架构,以便我可以在MongoDB的用户文档中存储应用程序所需的自定义数据(首选项,一些记录)等等),但我遇到了麻烦。当我尝试运行grunt时应用程序崩溃,我收到以下错误:

/Users/myuser/Projects/pomapp2/node_modules/mongoose/lib/index.js:335
      throw new mongoose.Error.MissingSchemaError(name);
      ^
MissingSchemaError: Schema hasn't been registered for model "User".
Use mongoose.model(name, schema)
    at Mongoose.model (/Users/myuser/Projects/pomapp2/node_modules/mongoose/lib/index.js:335:13)
    at Object.<anonymous> (/Users/myuser/Projects/pomapp2/modules/pom-app/server/models/pomData.server.model.js:5:21)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Module.require (module.js:353:17)
    at require (internal/module.js:12:17)
    at /Users/myuser/Projects/pomapp2/config/lib/mongoose.js:15:5
    at Array.forEach (native)
    at Object.module.exports.loadModels (/Users/myuser/Projects/pomapp2/config/lib/mongoose.js:14:30)
    at Object.<anonymous> (/Users/myuser/Projects/pomapp2/config/lib/app.js:20:10)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Module.require (module.js:353:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (/Users/myuser/Projects/pomapp2/server.js:6:11)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
[nodemon] app crashed - waiting for file changes before starting...

在我看来,这是模块文件夹中的模块按字母顺序加载的结果。我的模块名为“pom-app”,所以在“用户”之前加载,所以没有架构可以扩展,所有东西都会爆炸。

如果我将我的核心模块文件夹重命名为z-pom-app,使其最后加载,grunt会成功启动Mean.js应用程序。我的模块中的一些功能被破坏了,因为Angular仍然在没有z的情况下注册我的模块名称,导致对旧路径中的文件的请求,但我认为只需重命名Angular模块就可以解决这个问题。但是,重要的部分是Mean.js核心运行并且Express模块​​扩展代码现在可以工作,并且注册的新用户将我的附加字段完全按照我的预期添加到他们的用户文档中,就像他们在我的原始功能中一样.io app。

所以要解决这个问题...我不愿意将我的模块重命名为z-pom-app,因为这看起来真的很hacky(我不想在url中这样做)并且必须有一个干净的方法来做它。我在这里错过了什么?如何在我的模块之前加载用户模块?或者我接近这种情况是完全错误的,因为我是新手,在这种情况下,我应该如何更改应用程序的结构?

像我说的那样,我在这里很新,所以如果你认为我缺少一些基本的东西,那很可能。 ;)

非常感谢您在此提供任何帮助或想法,谢谢!

0 个答案:

没有答案