前言
在现代的 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:
npm install fastify typeorm reflect-metadata @types/node mysql
reflect-metadata
是用来创建实例。@types/node
是 TypeScript 对 Node.js 的类型声明。
安装完软件之后,我们需要在项目根目录下创建一个 tsconfig.json
文件:
-- -------------------- ---- ------- - ------------------ - --------- ----------- --------- ------ ------ -------- ------------ ----- --------- -------- -- ---------- ------------- ---------- ---------------- --------------------- -
TypeScript 使用 tsconfig.json
配置文件来指定 TypeScript 项目如何编译成 JavaScript。
在 package.json
中,添加以下脚本:
"scripts": { "start": "tsc && node ./dist/server.js", "dev": "nodemon --exec ts-node src/server.ts" }
start
脚本是用来启动编译后的 JavaScript 文件;dev
脚本是用来启动开发模式的脚本,此时 TypeScript 会自动编译并运行代码。
使用 Fastify 构建路由
使用 Fastify 构建路由非常简单。我们只需要使用 fastify
导出一个路由对象并在请求中使用该对象即可。由于 Fastify 支持链式调用,所以我们可以在构建路由时使用它们。
以下是一个简单的例子:
-- -------------------- ---- ------- ------ ------- ---- --------- ----- --- - --------- ------------ ----- ----- ---- -- - ---------- ------ ------- -- -- ------------- ----- ----- ---- -- - ---------- -------- ---------- -- -- ---------------- -- -- - ------------------- ------- -- ----------------------- --
上面的代码创建了一个路由对象,该路由对象有两个路由处理函数。一个处理 GET /
请求,另一个处理 POST /
请求。这些路由处理程序是用 async
和 await
编写的,以便处理异步操作。最后调用 listen
函数运行服务器。
使用 TypeORM 连接数据库
使用 TypeORM 连接数据库也非常简单。使用 getConnection()
方法连接到数据库。
下面的代码示例中使用了 MySQL 数据库,具体的数据库配置应该根据实际情况填写:
-- -------------------- ---- ------- ------ - ---------------- - ---- --------- ------------------ ----- -------- ----- ------------ ----- ----- --------- ------- --------- ------- --------- ------- --------- --- ------------ ---- ------------------ -- - --------------------- ----------- -------------- -- - --------------------- ---------- -------- ------ --
在 createConnection()
函数中,我们需要指定数据库的类型和连接参数。TypeORM 支持多种类型的数据库,如 MySQL,PostgreSQL 及 MongoDB。具体的参数形式同各种数据库的参数。
entities
参数用于指定我们的实体,在本例中,可以为空数组。
synchronize
参数用于同步数据库中定义的实体。
在 then()
函数中成功连接到数据库时,在控制台中输出一条消息,如果连接失败则在 catch()
函数中输出错误信息。
定义实体
在使用 TypeORM 连接到数据库后,我们可以定义实体。实体可以与数据库中的表相对应。有关 ORM 的详细信息可以查看文档。
下面的代码定义了一个 User
实体,该实体包括 id
,name
和 email
字段。请注意,我们使用了 TypeScript 类来定义实体类,而不是使用 JavaScript 对象字面量。
-- -------------------- ---- ------- ------ - ------- ----------------------- ------ - ---- --------- --------- ------ ----- ---- - ------------------------- ---- ------ --------- ------ ------ --------- ------- ------ -
@Entity()
装饰器用于告诉 TypeORM,这个类是一个实体。@PrimaryGeneratedColumn()
装饰器告诉 TypeORM 生成一个自增的主键id
。@Column()
装饰器用于标记其他字段,name
,email
是我们在User
实体中添加的两个字段,也会作为数据库表中的两个字段。
创建实体并将其保存到数据库
在定义好实体类之后,我们可以使用 getConnection()
方法获取数据库连接。然后,使用 getRepository()
方法获取实体的存储库,并使用 save()
方法向数据库添加实体。
-- -------------------- ---- ------- ------ - ---------------- - ---- --------- ------ - ---- - ---- ----------------- ------------------ ----- -------- ----- ------------ ----- ----- --------- ------- --------- ------- --------- ------- --------- ------- ------------ ---- ------------- ---------- -- - --------------------- ----------- ----- -------------- - ------------------------------ ----- ---- - --- ------ --------- - ----- ----- ---------- - ------------------ ----- ------------------------- ----------------- -------- ----- -------------- -- - --------------------- ---------- -------- ------ --
上面的代码创建了一个 User
实体对象,并将其保存到数据库中。注意,我们使用了 async
和 await
,以确保异步操作的正确执行。当添加成功时,在控制台输出用户对象。
示例代码
以下是完整的示例代码:
-- -------------------- ---- ------- ------ ------- ---- --------- ------ - ---------------- - ---- --------- ------ - ---- - ---- ----------------- ----- --- - --------- ------------ ----- ----- ---- -- - ---------- -------- ------ ------ -- -- ------------------ ----- ----- ---- -- - ----- - ----- ----- - - -------- ----- -------------- - --------------------------- ----- ---- - --- ------ --------- - ---- ---------- - ----- ----- ------ - ----- ------------------------- ---------------- -- ------------------ ----- -------- ----- ------------ ----- ----- --------- ------- --------- ------- --------- ------- --------- ------- ------------ ---- ------------- ---------- -- - --------------------- ----------- ------------------- ----------- ---------------- -- -- - ------------------- ------- -- ----------------------- -- -------------- -- - --------------------- ---------- -------- ------ --
总结
TypeScript 为我们带来了类型检查和更好的可读性。Fastify 和 TypeORM 分别为我们带来了更好的性能和更好的 ORM,使我们可以更轻松地构建和管理 Web 应用程序。
在本文中,我们学习了如何使用 Fastify 和 TypeORM 以 TypeScript 构建 Web 应用程序。我们使用 Fastify 构建路由、使用 TypeORM 连接和使用实体。最后,我们在应用程序中创建了一个用户,将其保存到数据库,并定义了一个 RESTful API,以使用该实体来进行交互。通过本文,希望能够帮助读者更好地理解 TypeScript 和 Fastify、TypeORM,并在实际项目中应用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648046ad48841e9894fc3502