首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在应用程序之间共享Mongoose模式

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

Stack Overflow用户
提问于 2016-11-15 01:33:53
回答 2查看 1.5K关注 0票数 4

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

代码语言:javascript
复制
-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”是访问者将看到的网站。

我要做的是从“前端/应用/控制器”上的控制器访问“后端”文件夹中的mongoose模式/模型。我尝试了像this这样的东西,但它没有解决我的问题。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2018-06-01 17:11:16

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

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

代码语言:javascript
复制
require('mongoose');

Require将在另一个应用程序的node_modules中使用mongoose,而在我的例子中,这甚至不是相同的版本。它不会抛出任何错误,但任何查询/更新/保存都不会执行回调。

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

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

代码语言:javascript
复制
global.__basedir = __dirname;

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

然后在模型中,像这样要求mongoose:

代码语言:javascript
复制
var mongoose = require(global.__basedir + '/node_modules/mongoose');

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

代码语言:javascript
复制
var mongoose = require(process.env.appdir + '/node_modules/mongoose');
票数 2
EN

Stack Overflow用户

发布于 2019-06-07 08:19:26

或者,也可以使用Lerna设置monorepo

您可以像这样设置项目:

代码语言:javascript
复制
- MyApp:
  - models
    - ...
    - package.json
  - frontend
    - ...
    - package.json
  - backend
    - ...
    - package.json

frontendbackend中的任何地方,您都可以像这样简单地导入模块

代码语言:javascript
复制
import {...} from '@myapp/models'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40594590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档