Deno 是一个现代的 JavaScript 和 TypeScript 运行时,它内置了许多安全功能,并且提供了一种处理 HTTP 请求的新方法。本章将详细介绍如何使用 Deno 来处理 HTTP 请求。
创建简单的 HTTP 服务器
创建一个简单的 HTTP 服务器是学习如何使用 Deno 处理 HTTP 请求的基础。首先,让我们来看一下如何通过 Deno 创建一个基本的 HTTP 服务器。
import { serve } from "https://deno.land/std@0.148.0/http/server.ts"; const server = serve({ port: 8000 }); console.log("Server running on http://localhost:8000"); for await (const req of server) { req.respond({ body: "Hello World\n" }); }
这段代码首先导入了 serve
函数,然后通过这个函数创建了一个监听 8000 端口的服务器。对于每个传入的请求,服务器会简单地返回 "Hello World"。
接收和解析请求参数
在实际应用中,我们经常需要处理来自客户端的请求参数。这些参数可以通过 URL、查询字符串或请求体传递给服务器。Deno 提供了多种方式来接收和解析这些参数。
URL 参数
URL 参数通常通过路径传递。例如,如果你的 API 路径是 /api/users/:id
,那么 :id
就是一个 URL 参数。你可以使用以下代码来获取这些参数:
-- -------------------- ---- ------- ------ - ----- - ---- ----------------------------------------------- ----- ------ - ------- ----- ---- --- --- ----- ------ --- -- ------- - ----- --- - --- ------------- -------------------------- -- -- -------------- ---------------------------------------- -- -- --- ------------- ----- ---- --------- ---- ---- -- --------------------------------- --- -
查询字符串
查询字符串通常是 URL 中的一部分,用于向服务器发送额外的信息。你可以通过 URLSearchParams
对象来访问它们。
-- -------------------- ---- ------- ------ - ----- - ---- ----------------------------------------------- ----- ------ - ------- ----- ---- --- --- ----- ------ --- -- ------- - ----- --- - --- ------------- ----- ------ - ----------------- -------------------------------- -- ---------- ------------- ----- ------ ------ ----------- --------------------- --- -
请求体
当客户端通过 POST 或 PUT 请求发送数据时,这些数据会出现在请求体中。为了从请求体中读取数据,你需要使用 req.body
属性。
-- -------------------- ---- ------- ------ - ----- - ---- ----------------------------------------------- ------ - ---------- - ---- ------------------------------------------------------- ----- ------ - ------- ----- ---- --- --- ----- ------ --- -- ------- - ----- ---- - ----- ---------------- ------------------ -- ------- ---- -- ------------- ----- --------- ----- ------------------------ --- -
响应处理
除了发送简单的文本响应之外,你还可以发送更复杂的响应,如 JSON、HTML 或者静态文件。
发送 JSON 响应
在许多 Web 应用中,API 通常会返回 JSON 格式的响应。下面是如何使用 Deno 发送 JSON 响应的例子:
-- -------------------- ---- ------- ------ - ----- - ---- ----------------------------------------------- ------ - ---- - ---- -------------------------------------------------------- ----- ------ - ------- ----- ---- --- ------------------- --- ----- ------ --- -- ------- - -- -------- --- ------------ - ------------- ----- - -------- ------- ---- -- - ---- ---------- - --- - -
发送 HTML 响应
有时候,你可能需要发送 HTML 内容作为响应。这可以通过简单地设置响应头并发送 HTML 字符串来实现。
-- -------------------- ---- ------- ------ - ----- - ---- ----------------------------------------------- ----- ------ - ------- ----- ---- --- --- ----- ------ --- -- ------- - -- -------- --- -------- - ------------- -------- - --------------- ----------- -- ----- ----------- ---- -- -- ---- ---------------- --- - -
发送静态文件
在开发 Web 应用时,有时需要提供一些静态资源,如图片、CSS 文件或 JavaScript 文件。Deno 提供了简单的机制来处理这些静态文件。
-- -------------------- ---- ------- ------ - ----- - ---- ----------------------------------------------- ----- ------ - ------- ----- ---- --- --- ----- ------ --- -- ------- - ----- -------- - --------------------- --- - ----- ---- - ----- ------------------------ ------------- -------- - --------------- ----------- -------------- -- ----- ---- --- - ----- --- - ------------- ------- ---- ----- ----- --- ------ --- - -
在这个例子中,服务器尝试从指定目录(这里是 ./public
)读取请求的文件。如果文件存在,则返回文件内容;否则返回 404 错误。
中间件和路由
随着应用变得复杂,你可能会发现需要使用中间件来处理各种任务,如日志记录、错误处理等。Deno 提供了一些工具和库来帮助你管理这些需求。
使用中间件
中间件可以让你在请求到达最终处理程序之前对其进行操作。Deno 的标准库提供了 http/middleware
模块,你可以利用它来添加日志记录等功能。
-- -------------------- ---- ------- ------ - ----- - ---- ----------------------------------------------- ------ - --- - ---- ------------------------------------------------------- ----- ------ - ------- ----- ---- --- ------------------ --- ----- ------ --- -- ------- - -- -------- --- ------------ - ------------- ----- ----- -- - ---- --------- --- - -
路由管理
随着应用规模的增长,你可能需要对不同的 URL 使用不同的处理逻辑。这时,路由管理就显得尤为重要。虽然 Deno 没有内置的路由系统,但你可以使用第三方库来简化这一过程。
-- -------------------- ---- ------- ------ - ----- - ---- ----------------------------------------------- ------ - ------- ---- ---- - ---- ------------------------------------------- ----- ------ - -------- --------- ----- -- ----------------- - ----- ------ -------------- ----- -- ----------------- - ------ ------ ---------------- ----- -- - ----- ---- - ------------------- ------ ----------------- - --------- ----- --------- --- ----- ------ - ------- ----- ---- --- --- ----- ------ --- -- ------- - ----- ------- - ------------------------- --------- -- --------- - ------------- - ---- - ------------- ------- ---- ----- ---- ------ --- - -
在这个例子中,我们定义了几个路由,包括 GET 和 POST 方法。当请求到达时,路由器会查找匹配的处理函数并执行它。
以上就是关于 Deno 如何处理 HTTP 请求的详细讲解。希望这些示例能帮助你在实际项目中更好地使用 Deno。