基于 ES7 的 @loopback/repository 实现数据存储

阅读时长 7 分钟读完

什么是 @loopback/repository

@loopback/repository 是一个基于 TypeScript 和 ES7 的用于实现数据存储和查询的库,它提供了一种面向对象的方式来定义数据模型和操作数据的方法。使用该库,我们可以轻松地将数据存储到常见的数据库中,如 MySQL、PostgreSQL 和 MongoDB 等。

如何使用 @loopback/repository

安装依赖

要使用 @loopback/repository,需要先安装必要的依赖。我们可以使用 npm 或 yarn 来安装它们:

或者

数据模型

定义一个数据模型要使用 @model 装饰器,它可以将一个 TypeScript 类转换成一个 LoopBack4 的数据模型。下面是一个基本的例子:

-- -------------------- ---- -------
------ ------- --------- ---- -----------------------

--------
------ ----- ---- -
  -----------
    ----- ---------
    --- -----
    --------- -----
  --
  --- -------

  -----------
    ----- ---------
    --------- -----
  --
  ------ -------

  -----------
    ----- ----------
    --------- -----
    -------- ------
  --
  ---------- --------
-

这个 Todo 类包含三个属性:id、title 和 completed。我们使用 @property 装饰器来定义它们的数据类型、是否是必填项、默认值等信息。

数据源

定义好了数据模型,接下来要配置一个数据源,使得我们的应用程序可以存储和查询数据。

@loopback/repository 支持多种数据源,我们可以使用以下内置数据源之一:

  • MemoryDataSource:内存数据源,适用于简单的开发和测试环境。
  • PostgreSQLDataSource / MySQLDataSource:关系型数据库数据源。
  • MongoDbDataSource:MongoDB 数据库数据源。

以 PostgreSQL 数据源为例,我们需要先安装依赖:

然后,在应用程序主文件中设置数据源:

-- -------------------- ---- -------
------ ------------------ ---- ----------------
------ ------------------- ---- -----------------

------ -------------------

------ ----- -------- ------------- ----------------- - --- -
  ----- --- - --- --------------------------
  ----- -----------
  ----- ------------
  ------------------- -- ------- -- ------------------------
  ------ ----
-
-- -------------------- ---- -------
------ -------------------- ---- ---------------------------------
------ ----------------- ---- -----------------
------ ---------------- --------------- ---- ------------------
-- ---
------ ----- ---------------- ------- ----------
  -----------------------------------------------
- -
  -------------------- ----------------- - --- -
    -- ---
    ----- ---------- - --- --------------------
      ----- ------------
      ----- -----
      --------- ---------
      --------- -------------
      --------- -------
    ---
    ------------------------------------- ------------
    -- ---
  -
-

数据库表

一旦我们配置好了数据源,我们可以轻松地创建和更新数据库表。

只需要使用以下的命令即可:

该命令将根据数据源的配置生成一个数个迁移文件。(例如:往 datasources/postgres 目录中添加 mysql.datasource.config.json 中的 models [...]表示的表)

然后,我们可以使用以下命令来实际将这些迁移脚本应用于数据库:

存储库

定义数据模型后,我们需要编写一个存储库,它将提供一组 API 来操作这些数据。存储库可以包含一些标准的 CRUD 操作,例如:create、read、update、delete。

-- -------------------- ---- -------
------ -------- ---- -----------------
------ ----------------------- ---- -----------------------
------ ----------------- ---- -----------------
------ ------ -------------- ---- ------------

------ ----- -------------- ------- ----------------------
  -----
  ------ ------------------
  -------------
- -
  ---------------------------------------- ----------- ---------------- -
    ----------- ------------
  -
-

由于我们的数据源名为 MyApiDataSource,如果要在存储库中使用该数据源,需要使用注入器来注入该数据源的实例。

这里,我们通过 @inject 装饰器来注入 datasources.myApi

使用存储库

最后,我们可以在控制器或服务等组件中使用存储库提供的 API 来操作数据。

-- -------------------- ---- -------
------ ------------ ---- -----------------------
------ ----- ------ ----- ------------ ---- -----------------
------ ------ ---- ------------
------ ---------------- ---- ------------------

------ ----- -------------- -
  ------------
    ---------------------------
    ------ --------------- ---------------
  - --

  -- ----
  --------------
  ----- ------- --------------- -
    ------ ----- ---------------------------
  -

  -- ----
  -------------------
  ----- --------------------------------- --- -------- ------------- -
    ------ ----- ---------------------------------
  -

  -- --
  ---------------
  ----- --------------------- ----- ------ ------------- -
    ------ ----- ---------------------------------
  -
-

总结

@loopback/repository 是一个功能强大且易于使用的库,它提供了一种面向对象的方式来定义数据模型,并使用存储库提供一组标准的 CRUD API 来操作数据。

借助 @loopback/repository,我们可以轻松地将数据存储到常见的数据库中,并使用服务、控制器等组件来操作数据。值得一提的是,@loopback/repository 还支持多个数据源,你可以选择最适合你的应用程序的数据源。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648b718848841e98949c73f3

纠错
反馈