我有一个具有以下结构的应用程序:
-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
“backend”文件夹是“admin”的节点应用程序
“admin”是管理应用程序的公共文件夹,“frontend”是访问者将看到的网站。
我要做的是从“前端/ app / controller”上的控制器访问“后端”文件夹中的mongoose模式/模型。
我试过类似this的东西,但它没有解决我的问题。
任何帮助将不胜感激。
答案 0 :(得分:1)
我遇到了同样的挑战,故意想要拆分两个应用程序的代码库,但在数据库中共享一个架构。
从另一个应用程序的路径中要求模型的问题在于:
require('mongoose');
要求将在其他应用程序的node_modules中使用mongoose,在我的情况下,这甚至不是同一个版本。它不会抛出任何错误,但任何查询/更新/保存都不会执行回调。
我通过在应用程序的路径中强制要求mongoose模块来解决这个问题。
在应用程序开始时,添加此项以设置应用程序的基本目录:
global.__basedir = __dirname;
我知道使用全局变量是不受欢迎的,但我认为这是一个很好的例外。
然后在模型中,需要像这样的猫鼬:
var mongoose = require(global.__basedir + '/node_modules/mongoose');
全局.__ basedir的替代方法可以是在环境中设置应用程序的路径目录并使用它:
var mongoose = require(process.env.appdir + '/node_modules/mongoose');
答案 1 :(得分:1)