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

面试官:小伙子,你的数组去重方式惊艳到我了

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


猜你喜欢

  • 使用 ESLint 检查 Angular 应用程序中的代码

    在 Angular 应用程序中,编写可靠的代码是非常重要的。代码质量不仅影响到应用程序的性能和可维护性,也影响到应用程序的安全性和稳定性。使用 ESLint 工具可以检查 Angular 应用程序中的...

    19 天前
  • JavaScript 标准的发展历程研究

    JavaScript,通常简称为 JS,是一种面向对象、动态类型语言,常用于在网页浏览器中进行客户端脚本编程,从而实现网页动态效果及交互功能。JavaScript 诞生于 1996 年,经过多年的发展...

    19 天前
  • Promise 的使用技巧及最佳实践

    在前端开发中,异步操作是非常常见的场景,例如 Ajax 请求、定时器、文件读取等等。在过去,我们通常使用回调函数来处理异步操作,但是回调函数会带来回调地狱(callback hell)的问题,代码复杂...

    19 天前
  • Serverless 架构 —— Lambda 执行环境如何做到高效

    简介 Serverless 架构是近年来备受关注的新型架构,它有很多优点,例如无需管理服务器、按需伸缩、精细计费等等。其中,Lambda 是 AWS 家族中使用率较高的一种无服务器计算服务。

    19 天前
  • 在现实世界中优化 GraphQL 查询效率

    GraphQL是一种流行的数据查询语言和API,它在现代Web应用程序中的使用越来越普遍。然而,在查询大量数据时,GraphQL性能可能会变得较慢。本文将介绍如何在现实世界中优化GraphQL查询效率...

    19 天前
  • ES10 中使用 Object.entries 方法对对象进行遍历

    ES10 是 ECMAScript 2019 的正式规范,其中有很多新的特性和改进。其中一个很有用的特性就是 Object.entries 方法。它可以将一个对象转换成键值对数组,然后可以使用数组遍历...

    19 天前
  • 使用 SSE 实现服务端推送数据的完整范例

    随着 Web 技术的发展,越来越多的互联网应用需要实时更新数据。这种特殊的需求需要服务端主动推送数据到客户端,而不是客户端轮询或者某些人为触发的操作。Server-Sent Events (SSE),...

    19 天前
  • 如何将 ES6 项目快速升级至 ES7 版本

    前言 ES6 作为 ECMAScript 的一个重大更新版本,带来了很多新的语法和特性。然而,在实际开发中,我们可能仍然需要使用一些 ES7 的特性来提高代码的质量和开发效率。

    19 天前
  • Babel 如何支持高阶函数的编译?

    在 JavaScript 中,高阶函数是一种特殊的函数,它接收一个或多个函数作为参数,并返回一个新的函数。高阶函数在函数式编程中经常使用,但对于初学者来说,理解并使用高阶函数可能会有一定难度。

    19 天前
  • 无障碍设计技巧:如何为单手操作用户提供更好的操作?

    随着社会的进步,无障碍设计在互联网上变得越来越重要。单手操作用户是残障人士的一个常见群体,为了不让他们被网站和应用程序上的操作所限制,我们需要为他们提供更好的操作体验。

    19 天前
  • PM2 是如何守护 Node.js 进程,实现自启动和自重启的?

    什么是 PM2? PM2 是一个流行的进程管理工具,可用于管理 Node.js 应用程序。它是为了简化服务器上 Node.js 应用程序的部署和维护所设计的。 通过 PM2,您可以轻松地启动、停止、监...

    19 天前
  • Koa 中使用 koa-cors 实现跨域请求的方法

    跨域请求在前端开发中是一个比较常见的需求。而 Koa 是一个很流行的 Node.js 框架,因此灵活地使用 Koa 来实现跨域请求也是前端开发中的一项重要技能。本文将详细介绍如何在 Koa 中使用 k...

    19 天前
  • 解决 Material Design 中使用 TabLayout 禁止用户滑动的问题

    在 Android 应用中,Material Design 中的 TabLayout 是非常常见的控件之一。然而,在某些情况下,我们可能希望禁止用户通过手指滑动 TabLayout 来切换 Tab 的...

    19 天前
  • React.js 和 Next.js 之间的区别

    React.js 和 Next.js 是目前前端领域流行的两个框架。React.js 是由 Facebook 开源的 JavaScript 库,用于构建用户界面,而 Next.js 是基于 React...

    19 天前
  • RESTful API 的支持和维护技巧

    在现代化的 Web 应用开发中,RESTful API(Representational State Transfer API)是非常重要的一部分。鉴于其可扩展性和可重用性,它已经成为了许多公司开发新...

    19 天前
  • 使用 MongoDB 存储非结构化数据的指南

    什么是非结构化数据? 非结构化数据是指那些没有明确定义数据模型的数据。通常这种数据不容易以表格或关系形式存储。非结构化数据通常包括文本、图像、视频、音频等。 在前端开发中,非结构化数据是非常普遍的,比...

    19 天前
  • Performance Optimization:使用 JProfiler 提高 Java 应用性能

    什么是 JProfiler JProfiler 是一款功能强大的 Java 应用性能分析工具,它能够监控并分析 Java 应用的各种性能问题,并提供可视化的数据报告和建议性的优化建议。

    19 天前
  • 解决在 Hapi 应用程序中引用未定义名称的错误

    在开发 Hapi 应用程序时,我们可能会遇到一个常见的问题:出现未定义名称错误。这个错误通常发生在尝试使用未定义的变量或函数时,导致应用程序无法正常运行。本文将介绍如何解决在 Hapi 应用程序中引用...

    19 天前
  • PWA开发中如何避免缓存一致性问题

    在 PWA 的开发中,缓存对于提高应用性能和用户体验来说具有重要的作用。但是,缓存可能会导致一致性问题。例如,当您在应用程序中更改某个文件时,浏览器可能会从缓存中读取旧文件,而不是从服务器获取新文件。

    19 天前
  • ESLint 如何处理错误匹配

    在前端开发过程中避免错误是至关重要的一步。而这时候 ESLint 就会派上用场了。ESLint 是一款开源的 JavaScript 代码检查工具,可以让开发者在编写代码时自动检测潜在的问题并修复它们。

    19 天前

相关推荐

    暂无文章