在前端开发中,ORM 是一项非常重要的技术。ORM(Object Relational Mapping)是一种面向对象的数据库映射技术,可以通过对象来操作数据库,避免了直接操作数据库带来的繁琐、重复工作。本文将介绍如何使用 Koa2+TypeORM 进行 ORM 操作。
Koa2
Koa2 是一个 node.js 的 web 框架,其特点是轻量、简洁。Koa2 的设计非常优雅,基于 async/await 实现了流程的自动化协程管理。Koa2 的中间件机制非常灵活,可以自由组合,可以通过 next() 实现链式调用,带来非常好的可维护性和扩展性。
TypeORM
TypeORM 是一个基于 TypeScript 的 ORM 框架,支持多种数据库的连接和 ORM 操作,如:MySQL、PostgreSQL、SQLite、MariaDB 等等。TypeORM 设计的理念是简单、易用、灵活,其提供了非常灵活的数据模型描述方式,支持基于装饰器的数据模型描述方法。
安装 koa 和 TypeORM
首先,我们需要安装 Koa 和 TypeORM:
--- ------- --- ---------- -------------- ------- ---------------- ----- ------
koa-router、koa-bodyparser 是 koa 的中间件,用于路由和解析请求体。
reflect-metadata 是 TypeScript 的一个装饰器反射库,TypeORM 依赖于这个库。
MySQL 可以替换成任意一种你想要使用的数据库,只需要相应修改 TypeORM 的配置即可。
TypeORM 的配置
在代码中添加 TypeORM 的配置文件,TypeORM 配置文件的命名是 typeormconfig.json 或者 .env,为了更好的集成在 koa2 中,我们统一写到 typeormconfig.json 中,内容如下:
- ------- -------- ------- ------------ ------- ----- ----------- ------- ----------- ----------- ----------- ------- -------------- ----- ---------- ----- ----------- - -------------------- -- ------------- - ----------------------- -- -------------- - ------------------------ -- ------ - -------------- ------------- ---------------- ---------------- ----------------- ---------------- - -
上述配置文件中,我们配置了连接的数据库,用户名和密码以及数据库的名称。synchronize 设置为 true,表示 TypeORM 会自动更新数据库结构,logging 设置为 true,则在控制台输出日志信息。
定义好 TypeORM 的配置后,我们还需要在代码中进行初始化,如下:
------ ------------------- ------ - ---------------- - ---- ---------- ------ ----- ------- - -------------------
上述代码中,我们导入了 reflect-metadata 和 createConnection,没有异常表明我们的配置已经正确,TypeORM 会自动根据我们的配置进行连接和初始化,连接和初始化的过程都是异步的,于是我们需要在代码中进行调整。一般采用如下代码结构:
------ ------------------- ------ - -- --- ---- ------ ------ - ---------------- - ---- ---------- ----- --- - --- ------ ----- ---- - ----- ----- -------- ------ - --- - ----- ------------------- ----------------- ------------------- --------- -- ---- ---------- - ----- ------- - --------------------- - - -------
在上述代码中,我们采用 async 和 await 的方式,当数据库连接和初始化完成之后,再启动 koa2 的服务器进行监听。错误信息将打印出来,方便我们快速的找出问题所在。
定义实体
在 TypeORM 中,实体是映射数据库的一种方式,一张表对应一个实体。TypeORM 可以自动识别和匹配表名称和实体类名,也可以手动指定表名称和实体类名。在实体中可以定义表的字段、主键、默认值、索引等等。定义实体的代码如下:
------ - ------- ----------------------- ------ - ---- ---------- --------- ----- ---- - ------------------------- --- ------- --------- ----- ------- --------- ---- ------- --------- ------ ------- - ------ ------- -----
上述代码定义了一个名为 User 的实体,包含了 id、name、age 和 phone 四个字段,其中 id 是主键。注意,我们需要用 export default 将 User 导出,在相关代码中导入。
操作实体
TypeORM 提供了非常强大的 API,可以方便的进行增删改查操作。以下是一些常见的 API 使用情况。
查询操作
------ - ------------- - ---- ---------- ------ ---- ---- ----------------- -- ------ ----- -------- - ----- --------------------------- -- ---- -- --- ----- ---- - ----- ----------------------------------- -- ------- ----- ----- - ----- -------------------------- ------ - ----- --------- -- ------ - ---- ----- - ---
在上述代码中,我们使用了 find 方法、findOneById 方法、find 高级查询方法。find 方法可以查询所有实体,findOneById 方法可以查询具有指定 id 的实体,find 高级查询方法支持自定义查询条件和排序。
插入操作
------ - ------------- - ---- ---------- ------ ---- ---- ----------------- ----- ---- - --- ------- --------- - ---------- -------- - --- ---------- - -------------- ----- -------- - -------------------- ----- --------------------
在上述代码中,我们采用 new 创建一个 User 对象,然后将各个字段填充好,最后调用 save 方法将其保存到数据库中。
更新操作
------ - ------------- - ---- ---------- ------ ---- ---- ----------------- ----- -------- - -------------------- ----- ---- - ----- ------------------------ -- ------ - --------- - ------- -------- - --- ---------- - -------------- ----- -------------------- -
在上述代码中,我们先通过 findOneById 方法查询出 id 为 1 的实体,然后修改各字段,最后调用 save 方法将修改后的数据保存到数据库中。
删除操作
------ - ------------- - ---- ---------- ------ ---- ---- ----------------- ----- -------- - -------------------- ----- ---- - ----- ------------------------ ----- ----------------------
在上述代码中,我们先通过 findOneById 方法查询出 id 为 1 的实体,然后调用 remove 方法将其从数据库中删除。
使用 koa-router 进行路由管理
在 koa2 应用中,我们通常使用 koa-router 进行路由管理和中间件设置。koa-router 是一个轻量、灵活的中间件,支持嵌套路由、正则路由、命名路由等等。
安装 koa-router
我们可以使用 npm 来安装 koa-router:
--- ------- ---------- ------
在 koa2 中使用 koa-router
在 koa2 的代码中,我们通常采用如下方式使用 koa-router:
------ - -- ------ ---- ------------- ------ - -- --- ---- ------ ----- --- - --- ------ ----- ------ - --- --------- --------------- ----- ----- -- - -------- - ------ ------ ---- -- ------- --- ------------------------- ---------------------------------
在上述代码中,我们首先创建了一个 Router 对象,然后使用 get 方法设置了一个路由,当访问 / 路由时,响应一个 Hello World 字符串。最后使用 app.use 方法注册路由中间件。registerRoutes 函数内部可以根据需要设置多个路由和中间件。
使用 koa-bodyparser 进行请求体解析
在 koa2 中,我们通常采用 koa-bodyparser 中间件来进行请求体的解析。koa-bodyparser 是一个非常轻量的中间件,支持解析 JSON、form 表单等等类型的请求体。
安装 koa-bodyparser
我们可以使用 npm 来安装 koa-bodyparser:
--- ------- -------------- ------
在 koa2 中使用 koa-bodyparser
我们通常采用 app.use 方法注册 koa-bodyparser 中间件,如下:
----- --- - --------------- ----- ---------- - -------------------------- ----- --- - --- ------ ---------------------- -- ------------ -------------------- ----------------- ---------------- ------- -- ------------------------
在上述代码中,我们使用 app.use 方法注册了 koa-bodyparser 中间件,然后再调用 registerRoutes 函数注册自定义的路由和中间件。
使用 Koa2+TypeORM 进行 ORM 操作
我们将 koa-router 和 koa-bodyparser 和 TypeORM 结合在一起,形成一个完整的后端服务。代码如下:
------ ------------------- ------ - -- --- ---- ------ ------ - -- ------ ---- ------------- ------ - -- ---------- ---- ----------------- ------ - ------------- - ---- ---------- ------ ---- ---- ---------------- ----- --- - --- ------ ----- ------ - --- --------- ----- -------- ------ - --- - ----- ------------------- --------------------- ------- ---------- - ----- ------- - ----------------------- ------- -------- ------- ------- - -------------------- ----- ----- ----- -- - ----- ---- - --- ------- --------- - ---------------------- -------- - --------------------- ---------- - ----------------------- ----- -------- - -------------------- ----- -------------------- ---------- - ---- -------- - - ----- ---- -------- ----- ---- --------- ----- ----- -- --- ----------------------- ----- ----- ----- -- - ----- -- - -------------- ----- -------- - -------------------- ----- ---- - ----- ------------------------- -- ------- - ---------- - ---- -------- - - ----- ---- -------- ----- --- ------ -- - ---- - -------- - - ----- ---- -------- ---- ---- --------- ----- ----- -- - --- ----------------------- ----- ----- ----- -- - ----- -- - -------------- ----- -------- - -------------------- ----- ---- - ----- ------------------------- -- ------- - ---------- - ---- -------- - - ----- ---- -------- ----- --- ------ -- - ---- - --------- - ---------------------- -------- - --------------------- ---------- - ----------------------- ----- -------------------- -------- - - ----- ---- -------- ------- ---- --------- ----- ----- -- - --- -------------------------- ----- ----- ----- -- - ----- -- - -------------- ----- -------- - -------------------- ----- ---- - ----- ------------------------- -- ------- - ---------- - ---- -------- - - ----- ---- -------- ----- --- ------ -- - ---- - ----- ---------------------- -------- - - ----- ---- -------- ------- ---- -------- -- - --- ---------------------- ------------------------- --------------------------------- ----------------- ------------------- --------- -- ---- ------- - -------
在上述代码中,我们首先通过 init 函数初始化 TypeORM,然后设置了四个路由:分别进行了用户信息的增删改查操作。最后将路由和中间件全都注册到了 Koa 中。
总结
使用 Koa2+TypeORM 进行 ORM 操作优雅简洁、灵活,其中 TypeORM 是一个非常优秀的 ORM 框架。通过本文的学习,相信读者已经了解了 koa2、koa-router、koa-bodyparser 和 TypeORM 的基本使用方法,从而为我们进行前端项目的快速开发提供了很大的帮助。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/66582b6cd3423812e4e06557