如何使用 Fastify 和 TypeORM 做一个 TypeScript Web 应用

阅读时长 10 分钟读完

前言

在现代的 Web 应用开发中,JavaScript 大量应用于前端开发,而 TypeScript 使得我们可以在前端开发中使用类型系统。但在后端开发中,TypeScript 的类型系统并不普及。本文将介绍如何在使用 TypeScript 编写 Web 应用时,使用 Fastify 和 TypeORM 构建 Web API。这里的 Web API 是指符合 RESTful 风格的 HTTP API。

本文的读者应该已经具备 TypeScript 基础知识和 Node.js 开发经验。

技术选型

在本文中,我们将使用以下技术:

  • Fastify:一个高效的 Node.js Web 框架,性能比 Express 更优秀。
  • TypeORM:一个 TypeScript ORM(Object-Relational Mapping),用于构建应用程序的对象关系映射。它支持许多数据库,包括 MySQL,Postgres,SQLite,等等。

为什么选择这些技术呢?Fastify 是一个快速节点框架,旨在提供更快的速度和更低的内存占用量。它的 API 难以与 Express 相比,但是 Fastify 的性能比 Express 更好,可以更好地处理大量路由处理,支持自定义插件和钩子等特性,具有非常好的可扩展性。TypeORM 则是一个良好的 ORM,TypeScript 与其结合使用,可以在很大程度上简化数据库的操作。

准备工作

在开始构建 API 之前,我们需要安装并配置一些软件。我们需要安装 Node.js 和 TypeScript。TypeScript 可以简化代码的编写和维护,同时 TypeScript 相关的 IDE 带来了高效率的编写体验。

安装完 Node.js 和 TypeScript 后,我们使用 npm 安装 Fastify 和 TypeORM:

  • reflect-metadata 是用来创建实例。
  • @types/node 是 TypeScript 对 Node.js 的类型声明。

安装完软件之后,我们需要在项目根目录下创建一个 tsconfig.json 文件:

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

TypeScript 使用 tsconfig.json 配置文件来指定 TypeScript 项目如何编译成 JavaScript。

package.json 中,添加以下脚本:

start 脚本是用来启动编译后的 JavaScript 文件;dev 脚本是用来启动开发模式的脚本,此时 TypeScript 会自动编译并运行代码。

使用 Fastify 构建路由

使用 Fastify 构建路由非常简单。我们只需要使用 fastify 导出一个路由对象并在请求中使用该对象即可。由于 Fastify 支持链式调用,所以我们可以在构建路由时使用它们。

以下是一个简单的例子:

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

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

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

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

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

上面的代码创建了一个路由对象,该路由对象有两个路由处理函数。一个处理 GET / 请求,另一个处理 POST / 请求。这些路由处理程序是用 asyncawait 编写的,以便处理异步操作。最后调用 listen 函数运行服务器。

使用 TypeORM 连接数据库

使用 TypeORM 连接数据库也非常简单。使用 getConnection() 方法连接到数据库。

下面的代码示例中使用了 MySQL 数据库,具体的数据库配置应该根据实际情况填写:

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

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

createConnection() 函数中,我们需要指定数据库的类型和连接参数。TypeORM 支持多种类型的数据库,如 MySQL,PostgreSQL 及 MongoDB。具体的参数形式同各种数据库的参数。

entities 参数用于指定我们的实体,在本例中,可以为空数组。

synchronize 参数用于同步数据库中定义的实体。

then() 函数中成功连接到数据库时,在控制台中输出一条消息,如果连接失败则在 catch() 函数中输出错误信息。

定义实体

在使用 TypeORM 连接到数据库后,我们可以定义实体。实体可以与数据库中的表相对应。有关 ORM 的详细信息可以查看文档

下面的代码定义了一个 User 实体,该实体包括 idnameemail 字段。请注意,我们使用了 TypeScript 类来定义实体类,而不是使用 JavaScript 对象字面量。

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

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

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

  ---------
  ------- ------
-
  • @Entity() 装饰器用于告诉 TypeORM,这个类是一个实体。
  • @PrimaryGeneratedColumn() 装饰器告诉 TypeORM 生成一个自增的主键 id
  • @Column() 装饰器用于标记其他字段,nameemail 是我们在 User 实体中添加的两个字段,也会作为数据库表中的两个字段。

创建实体并将其保存到数据库

在定义好实体类之后,我们可以使用 getConnection() 方法获取数据库连接。然后,使用 getRepository() 方法获取实体的存储库,并使用 save() 方法向数据库添加实体。

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

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

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

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

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

上面的代码创建了一个 User 实体对象,并将其保存到数据库中。注意,我们使用了 asyncawait,以确保异步操作的正确执行。当添加成功时,在控制台输出用户对象。

示例代码

以下是完整的示例代码:

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

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

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

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

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

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

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

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

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

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

总结

TypeScript 为我们带来了类型检查和更好的可读性。Fastify 和 TypeORM 分别为我们带来了更好的性能和更好的 ORM,使我们可以更轻松地构建和管理 Web 应用程序。

在本文中,我们学习了如何使用 Fastify 和 TypeORM 以 TypeScript 构建 Web 应用程序。我们使用 Fastify 构建路由、使用 TypeORM 连接和使用实体。最后,我们在应用程序中创建了一个用户,将其保存到数据库,并定义了一个 RESTful API,以使用该实体来进行交互。通过本文,希望能够帮助读者更好地理解 TypeScript 和 Fastify、TypeORM,并在实际项目中应用。

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

纠错
反馈