如何以优雅的方式在多个项目中重用mongoose模型

时间:2018-01-24 07:09:08

标签: node.js mongodb mongoose mongoose-schema

假设我有3个node.js项目(1个app后端,1个app-admin后端,1个分析api)。在每个项目中,我都有一个模型模式调用贷款。

{
attributes: {
    userId: { type: String, required: true, index: true, ref: 'users', comment: '用户id' },
    amount: { type: Number, required: true, min: 0},
    totalAmount: { type: Number, required: true, min: 0},
    penaltyInterest: { type: Number, min: 0, required: true, default: 
  0 }
}
methods: {
    getFee () {//some calculation ops

 }
    save() {//some db ops
  }
    sendTo3rdComponent() {//some network ops
  }
}

这个模型有:一些方法,它的架构设计,api工具。如何在其他两个项目中重复使用它。

将设计和api重用于多个项目非常重要。

通常我们通过公共重用组件作为npm包。但是,该组件具有自己的db操作和网络操作。是否可以将其作为npm包装?

另一种选择就像eggjs

那么复制粘贴旁边的优雅解决方案是什么?

4 个答案:

答案 0 :(得分:4)

我不建议你发布一个已发布的npm包的原因,作为一个好的NodeJS开发人员,你不应该用不能帮助其他任何人的软件包污染npm。除非您是可以访问私有包选项的付费npm用户。

您知道package.json支持git网址,您可以阅读@ Git URLs as Dependencies

package.json

中的一些git网址示例
// github url
git+ssh://git@github.com:example/example-repo.git#v1.0.0

// bitbucket url
git+ssh://git@bitbucket.org/example/example-repo.git#v1.0.0

我的建议是创建一个单独的包,其中包含用于设置配置的API,在类似您的场景中,这将是与数据库连接相关的内容。将其上传到私有git仓库并在所有应用程序中使用私有git repo url。然后在应用程序初始化阶段配置包并使用其API。

现在,应用程序可以构建在任何可以访问私有存储库并可以重用代码的系统上。

如果您无法访问私人仓库,您还可以将您的包裹放在公共仓库上,这仍然比发布npm包更好,以便在您的应用程序中共享它。

答案 1 :(得分:3)

你可以创建另一个包含常见模型的包,并将其推送到私有git存储库,如果你对它很好,可以将其推送到公共存储库。然后使用package.json中的git存储库url而不是将其发布到NPM。我们假设您将其命名为models-repo。

它可以是一个简单的包,包括:

├── README.md
├── index.js
├── models
│   ├── carLoan.js
└── package.json

您可以使用git URL将其包含在应用程序的package.json文件中:

{ "models-repo" : "git+ssh://git@models-repo-path.git" }

现在您可以在任何文件中使用它并开始使用它:

const models = require('models-repo');
const carLoanModel = models.car_loan;
//Do something
carLoanModel.find({})

在生产中使用它时需要注意权限。

答案 2 :(得分:2)

您绝对可以将它们放入包中并重复使用。对于拥有自己的DB Ops和Network Ops,您可以在启动项目时将DB URL作为环境变量。并在连接到数据库时使用与process.env。$变量相同的内容。

答案 3 :(得分:2)

有很多方法可以解决这个问题,相当优雅。你绝对应该避免复制和粘贴这些内容。尤其是在开发期间以及当然维护过程中非常容易受应用程序生命周期变化影响的模式设计。下面列出的是您和您的团队可以为上述问题实施解决方案的选项。

  1. 最简单和可重复使用的方法是使用NPM打包您的包并分发给您的团队。 install命令作为GIT URL的选项。当然,出于隐私考虑,私人托管是强制性的。请参阅command line arguments
  2. 的此链接
  3. 而不是在GitHub上托管NPM Bitbucket,您可以做什么,仍然使用标准Node.js模块创建Node模块。并使用git serve在本地共享文件。这样任何开发人员都可以连接和获取数据,将其合并到代码库中。由于这也是暂时的,完成后它将被丢弃。这样,无论何时发生更改,您都可以使用git来修改历史记录。请阅读Git Daemon
  4. 注意:对于快速,未经身份验证的Git数据访问,他是常见的选择。请记住,由于它不是经过身份验证的服务,因此您通过此协议提供的任何内容都在其网络中公开。