Deno 是一个新兴的 JavaScript 运行时,它以安全性、可维护性和可测试性为基础,提供了一种类似 Node.js 的环境,同时消除了许多 Node.js 本身存在的问题。在 Deno 中使用 HTTP 服务,需要将一个函数作为服务的处理函数,该函数将在每个请求到达时被调用,并且需要通过 listenAndServe
方法来启动服务。本文将详细介绍如何使用 Deno 提供的相关 API 来快速地搭建一个 HTTP 服务,并提供一些实用的代码示例。
如何创建一个 HTTP 服务
在 Deno 中,创建一个 HTTP 服务非常简单,只需编写一个处理请求的函数,然后使用 Deno.listenAndServe
方法将其绑定到特定的端口上即可。这里我们先来看一个最基本的示例:
import { serve } from 'https://deno.land/std/http/server.ts' const server = serve({ port: 8000 }) console.log('http://localhost:8000/') for await (const req of server) { req.respond({ body: 'Hello World\n' }) }
这个例子中,我们使用 Deno.listenAndServe
方法创建了一个 HTTP 服务并监听在本地的 8000
端口上。对每个传入的请求,我们会得到一个 Request
实例,在这里我们直接返回了一个固定的字符串 "Hello World"。需要注意的是我们使用了 async/await
语法和 for-await-of
循环来处理请求,因为 server
使用了 Deno 的异步迭代器。
处理 HTTP 请求
在示例代码中,我们已经获取了每个 HTTP 请求,但我们还需要处理它们并做出应答。Deno 提供了一个方便的 API,可以帮助我们解析 HTTP 请求以及设置 HTTP 响应头和响应体。以下示例展示如何使用 Deno 中内置的 readRequestHeader
和 readRequestBody
方法读取请求头和请求体:
-- -------------------- ---- ------- ------ - ----- - ---- -------------------------------------- ------ - ------------------ --------------- - ---- ----------------------------------- ----- ------ - ------- ----- ---- -- ------------------------------------- --- ----- ------ --- -- ------- - --- - ----- ---- - ----- -------------------- ----- ------ - ----- ---------------------- ------------------- ------------- ----- ------ -------- -- - ----- ------- - -------------------- - -
上面的代码中,readRequestBody
和 readRequestHeader
函数都是由 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