使用 Typescript 和 NestJS 快速构建可扩展的 RESTful API

阅读时长 11 分钟读完

在 Web 开发领域,构建一个可扩展的 RESTful API 是一个常见的需求。随着 Typescript 和 NestJS 的流行,我们可以使用它们来快速构建优雅且可扩展的 RESTful API。

Typescript 简介

Typescript 是 Microsoft 推出的一种语言,它是 JavaScript 的超集,可以让你在代码编写阶段就能够检查错误,提高代码健壮性和可读性。使用 Typescript 可以让我们在编写代码时避免一些低级错误,而不必在运行时才发现。这些错误包括变量类型错误,方法调用错误和属性访问错误等等。

NestJS 简介

NestJS 是一个基于 Typescript 的 Web 开发框架,它把一些优秀的 Web 开发实践和设计模式集成到了一个框架中。这些实践和设计模式来自于 Angular 和 Express JS,使得 NestJS 在可扩展性和可维护性方面有着很大的优势。

安装 NestJS

在开始使用 NestJS 之前,你需要安装 Node.js 和 npm。如果你已经具备这些,你可以通过 npm 安装 NestJS CLI。

快速创建 NestJS 应用

在安装完 NestJS CLI 后,你可以通过运行以下命令来创建一个新的 NestJS 应用。

这将会创建一个名为 my-app 的新应用,并自动安装所需的依赖。

构建一个 RESTful API

创建一个 RESTful API 需要执行以下步骤:

  1. 使用 NestJS CLI 创建一个新的应用。
  2. 定义数据模型。
  3. 创建控制器,并定义 HTTP 请求路由(GET、POST、PUT、DELETE)。
  4. 在 NestJS 中使用依赖注入来调用其他服务。
  5. 使用 NestJS 中的中间件来处理请求。
  6. 获取请求参数,并进行验证。
  7. 处理请求并返回响应。

定义数据模型

在 NestJS 中定义数据模型是很容易的,只需要使用 TypeScript 的类定义数据模型即可。例如,我们有一个用户数据表,它有 id,name 和 email 字段,我们可以创建一个 User 类来定义它。

创建控制器

下一步是创建控制器,该控制器将用于处理 HTTP 请求。为了创建一个控制器,我们可以使用 nest generate 命令来自动生成。

这将创建一个名为 users.controller.ts 的文件,并在 app.module.ts 文件中将该控制器添加到应用程序中。

users.controller.ts 文件中,我们需要定义一些路由来处理 GET,POST,PUT 和 DELETE 请求。例如:

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

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

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

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

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

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

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

创建服务

接下来,我们需要创建一个服务,该服务将用于处理数据和业务逻辑。我们可以使用 NestJS 的 @Injectable() 装饰器来创建一个服务。例如,我们创建一个 UserService 服务,用于处理用户数据。

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

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

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

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

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

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

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

注册服务和控制器

在 NestJS 程序中,我们需要在应用程序模块中注册服务和控制器。我们可以使用 @Module() 装饰器来定义一个应用程序模块,并使用 providers 属性来注册所有依赖服务。

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

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

启动应用程序

最后一步是启动应用程序。我们可以使用 NestJS 的 NestFactory 类来启动应用程序。例如,我们可以在 main.ts 文件中将 NestJS 应用程序引导到服务器。

在上面的例子中,我们创建了一个 NestJS 应用程序并将其启动在 localhost:3000 这个端口上。

使用中间件和请求参数验证

在 NestJS 中,我们可以使用中间件和请求参数验证来处理和验证请求。例如,我们可以创建一个日志记录中间件来记录每个请求的信息,同时使用 class-validator 库来验证请求参数。

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

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

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

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

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

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

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

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

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

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

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

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

在上面的例子中,我们使用 class-validator 库来验证用户的请求参数,并使用中间件来记录每个请求的信息。我们还创建了一些 DTO 和管道来处理请求参数,这在处理大型数据时非常有用。

结论

使用 Typescript 和 NestJS 可以加快 RESTful API 的开发速度,并使其具有更好的可维护性和可扩展性。通过深入学习上面的例子,你可以更好的了解这些框架的使用方法和最佳实践。

完整代码见 https://github.com/davidroyer/nestjs-typescript-restful-api

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

纠错
反馈