如何使用 Deno 实现简单的 RESTful API?

介绍

Deno 是一个新的 JavaScript 和 TypeScript 运行时环境,它是由 Node.js 的创始人 Ryan Dahl 创建的。与 Node.js 不同的是,它使用了 V8 引擎和 Rust 编写的 Libdeno,它比 Node.js 更加安全、轻便和现代化。

RESTful API 是一种通过 HTTP 协议来访问和操作数据的接口规范,它使用简单的 HTTP 方法和 URL 来实现客户端和服务端之间的数据传输和交互。本文将介绍如何使用 Deno 实现 RESTful API 并提供示例代码。

准备

在开始之前,我们需要安装 Deno 运行时环境,可以使用以下命令在终端中安装:

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

安装成功后,我们就可以开始实现 RESTful API。

实现

创建服务器

首先,我们需要创建一个简单的服务器并监听端口,可以使用以下代码:

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

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

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

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

这段代码中,我们从 Deno 标准库中导入了 serve 函数用于创建服务器。我们创建了一个监听端口为 8000 的服务器,并在控制台上输出了运行信息。接着,我们使用 for await 循环来监听客户端请求,并使用 req.respond 函数来响应客户端请求。

处理路由

接下来,我们需要处理客户端请求的路由,即根据客户端请求的 URL 来执行相应的操作。我们可以将路由规则编写成一个对象,然后使用 JavaScript 的解构赋值来获取请求的 URL 和方法,可以使用以下代码:

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

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

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

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

这段代码中,我们定义了 HttpMethodHttpHandler 类型,并使用 HttpRoute 类型来定义所有路由规则。我们创建了一个名为 routes 的对象来定义路由规则,其中 /users 是路由路径,GETPOSTPUTDELETE 是请求方法,而其值则是该方法的处理函数。

接着,我们定义了一个名为 findHandler 的函数来获取请求的 URL 和方法,并返回相应的处理函数。该函数首先使用 URL 构造函数来解析请求的 URL,然后获取其路径名 pathname,使用该路径名从路由规则对象中获取相应的处理函数。

解析请求体

在处理 POST 和 PUT 请求时,客户端通常会在请求体中发送数据,我们需要解析请求体中的数据并将其转换为 JavaScript 对象。我们可以使用 BufReaderTextProtoReader 对象来读取请求体,并使用 JSON.parse 函数将请求体中的数据转换为 JavaScript 对象,可以使用以下代码:

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

这段代码中,我们使用 TextDecoder 对象将二进制数据转换为文本数据,并使用 JSON.parse 函数将文本数据转换为 JavaScript 对象。我们定义了一个名为 decode 的异步函数来异步获取请求体数据,并根据请求头中的 content-type 来判断请求体数据的类型。

响应客户端

最后,我们需要根据处理结果将结果返回给客户端。我们可以使用 req.respond 函数来响应客户端请求,并使用 JSON.stringify 函数将 JavaScript 对象转换为字符串返回给客户端,可以使用以下代码:

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

这段代码中,我们定义了一个名为 respond 的异步函数来处理客户端请求。我们在该函数中使用 try...catch...finally 语句捕获异常,如果在处理请求时出现了异常,则返回 500 状态码和错误消息,否则将处理结果转换为字符串并使用 req.respond 函数返回给客户端。

示例

使用上述代码,我们可以实现一个简单的 RESTful API 服务,以下是一个示例:

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

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

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

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

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

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

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

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

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

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

总结

本文介绍了如何使用 Deno 实现一个简单的 RESTful API。我们在实现过程中使用了 Deno 的标准库中的 HTTP 模块和 JavaScript 的新特性,实现了路由、请求体解析和响应客户端等功能。这些功能可以帮助我们在开发中更加快速地创建一些简单的 Web 服务。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/66554c90d3423812e49d5b87


猜你喜欢

  • 如何使用 Deno 实现 GraphQL 服务?

    GraphQL 是一种跨平台的查询语言,它建立在强类型系统上,可以帮助开发人员快速构建功能强大的 API。Deno 是一个新兴的 JavaScript 运行时,它通过内置的安全性和一组有用的功能来提高...

    5 个月前
  • 异步 JavaScript:ECMAScript 2018 的 Thenable 任务

    在前端开发中,经常会遇到需要进行异步操作的情况,例如发送网络请求、读取文件等。在 JavaScript 中,异步操作往往需要使用回调函数来处理,而随着业务逻辑的复杂化,回调函数会越来越难以维护和管理。

    5 个月前
  • 自定义元素如何在 Web Worker 中使用

    随着 Web 应用程序的复杂度不断增加,将应用程序的核心逻辑从主线程中移出成为了一个必不可少的选择,这也是为什么我们需要使用 Web Worker 的主要原因之一。

    5 个月前
  • 初学者指南:如何从头开始使用 Webpack

    Webpack 是一个模块化打包工具,它可以将多个 JavaScript 文件打包成一个单独的文件,也可以为其他类型的文件进行打包和转换(例如,SCSS、图片和字体文件等)。

    5 个月前
  • Vue.js 中如何部署项目到服务器

    Vue.js 是一款流行的前端框架,开发者可以使用它来构建单页面应用程序或复杂的交互式用户界面。一旦构建出的项目准备部署到服务器,开发者需要一些技术来完成这项任务。

    5 个月前
  • Sequelize 之查询条件中使用 LIKE 匹配详解

    Sequelize 是 Node.js 环境下比较流行的 ORM 库,它可以让我们用 JavaScript 的方式来操作数据库,使我们的代码更加简洁高效。在 Sequelize 的使用过程中,我们经常...

    5 个月前
  • C++ MFC 应用程序无障碍调试实用技巧分享

    前言 MFC (Microsoft Foundation Classes) 是一种用于创建 Windows 应用程序的 C++ 类库。MFC 应用程序开发需要掌握大量的 Windows API 接口,...

    5 个月前
  • PM2 自动监控 node.js 进程

    如果你是一名前端开发者,你应该已经使用过 node.js 来开发后端应用了。但是,每次启动应用程序时,您是否会遇到以下问题? 应用崩溃,需要重新启动。 进程挂起,需要手动恢复。

    5 个月前
  • Mongoose 中断指令的使用:break 和 return

    在使用 Mongoose 操作数据库时,有时候需要在某些条件下停止代码的执行。这时候就需要使用 break 和 return 这两个中断指令。 break 在循环执行代码时,break 可以用来立即停...

    5 个月前
  • Enzyme 中使用 mockReturnValue() 模拟函数的返回值

    Enzyme 中使用 mockReturnValue() 模拟函数的返回值 在前端的开发中,单元测试是非常重要的一个环节,而在实现单元测试的过程中,为了保证测试的准确性和可靠性,我们经常需要模拟一些函...

    5 个月前
  • 使用 ESLint 对文件代码进行规范化

    随着前端开发技术的不断发展,代码规范化成为了技术团队中不可避免的话题。ESLint 作为一个基于 JavaScript 的代码检查工具,能够对代码的质量和风格进行自动化检测,提高代码的可读性、可维护性...

    5 个月前
  • 如何使用 GraphQL 实现本地状态管理

    如何使用 GraphQL 实现本地状态管理 GraphQL 是一种新兴的数据查询语言,它可以帮助前端开发者更快地获取数据并在本地状态中管理它们。本文将探讨如何使用 GraphQL 实现本地状态管理,内...

    5 个月前
  • 适配 Material Design 的最佳实践和技巧

    Material Design 是谷歌推出的一种设计语言,用于提供一种现代化的设计方法,使用户体验更加统一。这种设计语言强调简洁、明亮、真实和有意义。如今,越来越多的网站和移动应用开始采用 Mater...

    5 个月前
  • TypeScript 中函数重载的使用方法

    在 TypeScript 中,函数重载是一种可以解决函数参数类型不确定的问题的方法。本文将详细介绍 TypeScript 中函数重载的使用方法,并提供示例代码和学习指导。

    5 个月前
  • MongoDB 遇到 Cannot find module 'bson' 的解决方法

    在使用 Node.js 开发中,我们经常需要和 MongoDB 进行交互。在使用 MongoDB 官方提供的 Node.js 驱动程序时,可能会遇到 “Cannot find module 'bson...

    5 个月前
  • socket.io 实现 websocket 双工通信功能

    在现代网络应用中,实时双向通信非常关键。传统的 HTTP 协议是一种无状态的请求响应模式,无法进行实时通信,但是 WebSocket 协议提供了一种长连接方式,可以实现双向通信。

    5 个月前
  • 使用 Web Components 更快地构建网页

    Web Components 是一组技术的集合,旨在帮助开发者创建可复用且容易维护的组件,从而提高网页构建的效率。本文将介绍 Web Components 技术,其如何加速开发并提高网页的质量,以及如...

    5 个月前
  • 如何基于 Serverless 架构实现在线教育应用开发

    随着互联网的发展,许多传统行业都开始转型线上,其中在线教育成为了热门领域之一。而 Serverless 架构作为一种新型技术,它的快速迭代以及弹性伸缩等优点,使得它成为开发在线教育应用的一种理想之选。

    5 个月前
  • 基于 Express 的 RESTful API 实现方法

    简介 RESTful API 是一种描述资源的网站API,它使用 HTTP 协议定位 API 资源,使用 HTTP 方法(GET,POST,PUT,DELETE)对资源进行操作,返回 JSON 格式的...

    5 个月前
  • 如何为自定义元素添加生命周期方法

    在前端开发中,有时我们需要创建自定义的 HTML 元素,以便在页面中使用。Web 组件标准提供了一个使用自定义元素(Custom Element)的方法。但是,与常规 HTML 元素不同,自定义元素不...

    5 个月前

相关推荐

    暂无文章