在 Deno 中使用 Express.js:详细教程和示例代码

阅读时长 16 分钟读完

Deno 是一个现代化的 JavaScript 和 TypeScript 运行时,在近几年越来越受到前端社区的欢迎。它提供了许多 Node.js 无法提供的优点,例如安全性、稳定性和开箱即用的 TypeScript 支持。在 Deno 中,我们同样可以使用 Express.js 这一流行的 Web 框架来构建后端应用程序。

在本文中,我们将介绍如何在 Deno 中使用 Express.js 构建一个简单的 RESTful API,并提供详细的教程和示例代码。

安装 Deno 和 Express.js

在使用 Deno 和 Express.js 之前,我们需要先安装它们。安装 Deno 可以通过官方网站来完成,它提供了各种不同的安装方式:https://deno.land/#installation

安装 Express.js 需要使用 Deno 自带的包管理器 deno,可以通过以下命令来安装:

这里我们使用 Oak 这个与 Express.js 类似的 Web 框架。

构建一个简单的 RESTful API

现在我们已经安装好了 Deno 和 Express.js,我们可以开始构建一个简单的 RESTful API 了。在这个 API 中,我们将提供以下功能:

  • 查询所有用户
  • 查询特定用户
  • 创建用户
  • 更新用户
  • 删除用户

初始化项目

首先,我们需要创建一个新的 Deno 项目文件夹,并进入该文件夹:

然后,我们创建一个新的 mod.ts 文件,用于定义我们的 API:

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

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

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

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

在这个文件中,我们首先导入了 Application 类型,该类可以用来创建我们的 Express 应用程序。然后,我们创建了一个新的应用程序实例,并将其绑定到 8000 端口。接下来,我们使用应用程序的 use 方法添加了一个中间件,该中间件将在每个请求中返回 Hello, World!。最后,我们通过 app.listen 方法开始监听指定的端口。

现在,我们可以使用以下命令来运行我们的应用程序:

如果一切顺利,你应该可以在 http://localhost:8000 中看到 Hello,World! 的输出。

查询所有用户

接下来,我们将扩展我们的 API,以便允许客户端查询所有用户。为了实现这个功能,我们需要创建一个新的路由,该路由将映射到 /users,并处理 GET 请求。在响应中,我们将返回一个包含所有用户的 JSON 对象。

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

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

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

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

在这个新的代码中,我们使用了 switch 语句来处理路由,如果请求的路径是 /users,则返回包含所有用户的 JSON 对象。否则,我们将返回前面的 Hello, World! 响应。现在我们可以使用以下命令来测试我们的 /users 路由:

如果一切顺利,你应该可以看到以下的 JSON 响应:

查询特定用户

接下来,我们将扩展我们的 API,以便允许客户端查询特定的用户。为了实现这个功能,我们需要将路由添加到 /users/:id 路径,并处理 GET 请求。在响应中,我们将返回一个包含指定用户的 JSON 对象。

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

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

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

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

在这个新的代码中,我们使用了一个带有参数的路由 /users/:id,其中 :id 是一个动态参数,可以通过 ctx.params.id 来访问。在请求中,我们首先获取 id 参数并将其转换为一个数字。然后,我们使用 JavaScript 的 find 方法来查找指定 ID 的用户。如果找到了用户,我们将返回他的 JSON 对象。否则,我们将返回一个 404 错误。

现在我们可以使用以下命令来测试我们的 /users/:id 路由:

如果一切顺利,你应该可以看到以下的 JSON 响应:

创建用户

接下来,我们将扩展我们的 API,以便允许客户端创建新的用户。为了实现这个功能,我们需要将路由添加到 /users 路径,并处理 POST 请求。在请求体中,我们将提供新用户的数据,并将其添加到用户列表中。在响应中,我们将返回一个包含新用户 ID 的 JSON 对象。

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

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

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

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

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

在这个新的代码中,我们首先将 users 列表定义为一个数组,存储所有的用户数据。然后,我们使用了一个带有参数的路由 /users,该路由可以处理 GET 和 POST 请求。在 POST 请求中,我们从请求体中读取新用户的数据。之后,我们为该用户指定一个新的 ID,并将其添加到 users 数组中。最后,我们将返回一个包含新用户 ID 的 JSON 响应。

现在我们可以使用以下命令来测试我们的 /users 路由:

如果一切顺利,你应该可以看到以下的 JSON 响应:

更新用户

接下来,我们将扩展我们的 API,以便允许客户端更新用户信息。为了实现这个功能,我们需要将路由添加到 /users/:id,并处理 PUT 请求。在请求体中,我们将提供要更新的用户数据,并将其替换掉指定 ID 的用户数据。在响应中,我们将返回一个包含更新用户 ID 的 JSON 对象。

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

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

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

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

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

在这个新的代码中,我们使用了 findIndex 方法来查找要更新的用户数据。然后,我们使用了 UPDATE 请求将新数据替换为旧数据。最后,我们将返回一个包含更新用户 ID 的 JSON 响应。

现在我们可以使用以下命令来测试我们的 /users/:id 路由:

如果一切顺利,你应该可以看到以下的 JSON 响应:

删除用户

最后,我们将扩展我们的 API,以便允许客户端删除用户。为了实现这个功能,我们需要将路由添加到 /users/:id,并处理 DELETE 请求。在响应中,我们将返回一个包含删除用户 ID 的 JSON 对象。

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

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

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

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

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

在这个新的代码中,我们使用了 DELETE 请求来删除用户数据,使用 splice 方法将指定 ID 的元素从数组中删除。然后,我们将返回一个包含删除用户 ID 的 JSON 响应。

现在我们可以使用以下命令来测试我们的 /users/:id 路由:

如果一切顺利,你应该可以看到以下的 JSON 响应:

结论

在本文中,我们已经介绍了如何在 Deno 中使用 Express.js 构建一个简单的 RESTful API。我们涵盖了多个功能,包括查询所有用户、查询特定用户、创建用户、更新用户和删除用户。我们提供了详细的教程和示例代码,希望能够帮助你更好地理解如何在 Deno 中使用 Express.js。

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

纠错
反馈