在Node.js中创建一个ORM的教程

239 阅读3分钟

什么是ORM?

简单来说,ORM系统是一种技术,你使用面向对象的范式来创建应用程序和数据库之间的映射,直接进行数据操作和查询。

当涉及到在连接和关系上的检索和插入时,它将遵循同样的范式来操作或查询与操作有关的数据。

例如,一个简单的内部连接查询将这样查询数据:

SELECT Orders.OrderID, Customers.CustomerName

这个内联查询将返回一个以行为单位的数据列表,但你可能想将其汇总成一些更可读的格式。

让我们开始吧

我已经创建了一个小的模板,以使事情早点开始。我还假设你对Node.js有一定的了解,并且在开始之前知道如何连接到数据库。但无论你的技术水平如何,你都可以在这里找到源代码。

用我们的源代码,在终端运行以下命令:

1. docker-compose build

现在如果你去路由localhost:5000/,你会看到一个空的对象提示起来。这里有一个名为migrations的文件夹,我使用db-migrate包在其中添加了3个表,即用户、项目和与线性时尚相关的页面,分别在其迁移中。

该应用是用 术语 所以你可以 阅读 关于这一点,如果你以前没有使用过它。

模式

我们的数据库目前的模式是:

  • 用户表
  • 项目表(1-m与用户)。
  • 页面表(1-m与项目)。

我们的方法是创建一个将被继承到所有模型文件中的类,其方法将在所有模型中共享,如获取或保存。

让我们创建一个名为/models/index.js的文件夹和文件,并在其中创建一个名为DatabaseOperations的类。

Database operation class which will be contructed for common methods

models/index.js

在这里,我们用一个简单的构造方法导出该类,以获得通用名称。

让我们创建模式文件并把一些内容放在那里,就像下面的图片。

Page class for create a new operation

models/page.js

database operation class for project

models/project.js

models/user.js

这些都是简单的类,只是把数据库操作类作为一个父类。

现在,让我们在DatabaseOperation里面创建一个方法来获取记录

但是等等,即使我们使用类,我们也需要一些东西来建立我们的查询,所以首先创建一个查询生成器来生成查询。

A query builder to save and filter the database based on the input and return the output to map and join the fields

查询生成器

在这里,我们使用两个方法来获取过滤器和保存记录。这只是建立查询。这不会建立本地查询,而是建立包的查询来制定包的优势。

现在让我们看看如何为DatabaseOperation创建GET和POST方法。

让我们使用它们,更新路线以利用这些方法来存储和获取记录

保存和获取用户

save and fetch projects

保存和获取项目

管理关系

我们也可以管理关系以保持数据获取的顺序。为了管理,我们也需要做一些其他的项目,比如说:

  • 在查询生成器中添加一个新方法
  • 在DatabaseOperation类中添加一个新的方法来包括记录
  • 添加一个单独的条目来获取关系

请看关系项目的链接中是如何做的,我将在改天更新文章,用以下更强大的方法来管理它。

const data = await User.include([User.PROJECT], {

  where: {

    user_id: userId

   }

})

总结

现在我们已经创建了我们的自定义ORM,可以在同一时间对多个表进行获取、保存和其他操作。

我已经更新了repo中的其他方法,其中包括:

  • 更新
  • 删除
  • 包括(关系)

你可以在repo上的分支ORM中找到源代码。