为了将大型现有的Node + Express + Mongoose应用程序模块化为多个可安装的应用程序,每个应用程序都作为单独的NPM包开发,我们想知道在它们之间共享一个Mongoose实例是否是一个好主意?
假设我们有一套NPM包,每个包含客户端资产,Mongoose模型和使用Express实现的REST-API.它们确实具有一些共同特征,但基本上被认为是单独的可重复使用的人工制品.主机应用程序(也是基于Express的)在各种根URI下安装它们:
var discussions = require('discussions'),
tickets = require('tickets'),
events = require('events'),
express = require('express'),
app = express();
var environment = { ...see below... };
...
app.use('/events-api', events(environment));
app.use('/tickets-api', tickets(environment));
app.use('/discussions-api', discussions(environment));
Run Code Online (Sandbox Code Playgroud)
现在,由于events,tickets和discussions应用程序(独立的NPM包通过主机被拉package.json)使用猫鼬一样,主机应用程序本身,我们想通我们会在主机猫鼬例如通过某种environment对象,还包括其他的东西主机想要与已安装的应用共享.
你看到这种方法有任何明显的缺陷吗?在这种情况下挂载的应用程序不会将Mongoose指定为各自的依赖项package.json,并且它们不会 require('mongoose')
像通常那样完成,而是从负责将Mongoose实例连接到MongoDB的主机获取Mongoose实例.
如果这是一个坏主意,你建议每个子应用程序自己声明对Mongoose的依赖,每个NPM包将获得自己的Mongoose副本,并且每个都必须连接到MongoDB,对吧?
一些背景信息:
编辑:在编辑完所有内容后澄清包结构npm install:
host/
assets/
models/
routes/
node_modules/
express/ ...
mongoose/ ...
events/
assets/ ...
models/ …Run Code Online (Sandbox Code Playgroud)