在 Deno 中使用 HTTP 服务

Deno 是一个新兴的 JavaScript 运行时,它以安全性、可维护性和可测试性为基础,提供了一种类似 Node.js 的环境,同时消除了许多 Node.js 本身存在的问题。在 Deno 中使用 HTTP 服务,需要将一个函数作为服务的处理函数,该函数将在每个请求到达时被调用,并且需要通过 listenAndServe 方法来启动服务。本文将详细介绍如何使用 Deno 提供的相关 API 来快速地搭建一个 HTTP 服务,并提供一些实用的代码示例。

如何创建一个 HTTP 服务

在 Deno 中,创建一个 HTTP 服务非常简单,只需编写一个处理请求的函数,然后使用 Deno.listenAndServe 方法将其绑定到特定的端口上即可。这里我们先来看一个最基本的示例:

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

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

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

这个例子中,我们使用 Deno.listenAndServe 方法创建了一个 HTTP 服务并监听在本地的 8000 端口上。对每个传入的请求,我们会得到一个 Request 实例,在这里我们直接返回了一个固定的字符串 "Hello World"。需要注意的是我们使用了 async/await 语法和 for-await-of 循环来处理请求,因为 server 使用了 Deno 的异步迭代器。

处理 HTTP 请求

在示例代码中,我们已经获取了每个 HTTP 请求,但我们还需要处理它们并做出应答。Deno 提供了一个方便的 API,可以帮助我们解析 HTTP 请求以及设置 HTTP 响应头和响应体。以下示例展示如何使用 Deno 中内置的 readRequestHeaderreadRequestBody 方法读取请求头和请求体:

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

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

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

上面的代码中,readRequestBodyreadRequestHeader 函数都是由 Deno 提供的,它们读取了请求体和请求头。我们可以在 try...catch 语句块内使用它们,并输出请求头的内容。最后,我们使用 respond 方法将处理结果作为响应返回。此时,我们的服务已经能够接收 HTTP 请求并处理它们。

使用中间件

在实际构建 HTTP 服务的过程中,我们经常需要使用到中间件来处理请求。在 Deno 中,Deno 标准库也提供了一些实用的中间件来处理 HTTP 请求。例如,在许多情况下,我们需要进行身份验证,这时候就可以使用 auth 中间件来过滤请求。以下示例展示如何使用 auth 中间件:

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

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

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

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

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

这个例子中,我们首先定义了一个处理函数 handler,它将被传递给 auth 中间件。在 authMiddleware 中,我们传递了一些参数给 auth 中间件,以便它能够正确解析和验证请求头中的身份验证信息。最后,我们根据身份验证的结果调用 handler 函数并返回结果。

结论

本文介绍了如何在 Deno 中使用 HTTP 服务和中间件。通过掌握这些相关的 API,我们可以使用 Deno 构建实用的 HTTP 服务,以及使用中间件来处理 HTTP 请求。Deno 的相关文档和社区也提供了很多有用的资源,帮助我们更加深入地理解和运用这些 API。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6709d922d91dce0dc87c637b