如何在应用程序之间共享 Mongoose 模式

And*_*zke 5 mongoose mongodb node.js mongoose-schema

我有一个具有以下结构的应用程序:

-MyApp
  -backend
    -app
      +mongoose-models
    +node_modules
    index.js
    package.json
  -admin
    +(lots of stuff)
  -frontend
    -app
      +app_controllers
    +node_modules
    +public
    +view
    index.js
    package.json
Run Code Online (Sandbox Code Playgroud)

“backend”文件夹是“admin”的节点应用程序。
“admin”是用于管理应用程序的公共文件夹,“frontend”是访问者将看到的网站。
我想做的是从“frontend/app/controller”上的控制器访问“backend”文件夹内的猫鼬模式/模型。我尝试过类似的方法但它没有解决我的问题。

任何帮助将不胜感激。

小智 2

我遇到了同样的挑战,故意想要拆分两个应用程序的代码库,但在数据库中共享一个模式。

从另一个应用程序的路径请求模型的问题在于:

require('mongoose');
Run Code Online (Sandbox Code Playgroud)

Require 将使用其他应用程序的 node_modules 中的猫鼬,在我的情况下,这甚至不是相同的版本。它不会抛出任何错误,但任何查询/更新/保存都不会执行回调。

我通过强制要求应用程序路径中的猫鼬模块解决了这个问题。

在应用程序的开始处,添加以下内容以设置应用程序的基目录:

global.__basedir = __dirname;
Run Code Online (Sandbox Code Playgroud)

我知道使用全局变量是不受欢迎的,但我认为这是一个很好的例外。

然后在模型中,需要像这样的猫鼬:

var mongoose = require(global.__basedir + '/node_modules/mongoose');
Run Code Online (Sandbox Code Playgroud)

global.__basedir 的另一种选择是在环境中设置应用程序的路径目录并按如下方式使用它:

var mongoose = require(process.env.appdir + '/node_modules/mongoose');
Run Code Online (Sandbox Code Playgroud)