Deno 是一个现代化的 JavaScript 运行环境和脚本语言,支持 TypeScript,并提供了许多 Node.js 中没有的特性。其中一个特性就是处理 HTTP 请求和响应,本文将详细介绍如何在 Deno 中处理 HTTP 请求和响应,并给出示例代码以及指导意义。
HTTP 请求
在 Deno 中处理 HTTP 请求有两种方式:使用内置的 fetch
API 和使用第三方的 HTTP 模块。前者类似于浏览器中的 fetch
,后者则类似于 Node.js 中的 http
或 https
模块。
使用内置的 fetch
API
fetch
API 可以向任何 URL 发送 HTTP 请求,并返回一个 Promise 对象。在 Deno 中可以直接使用 fetch
API,如下所示:
const res = await fetch("https://example.com"); const body = await res.text(); console.log(body);
上面的代码将向 https://example.com
发送一个 GET 请求,并将响应体以文本形式输出到控制台。
如果需要发送 POST 请求,可以通过设置请求的选项来实现:
const res = await fetch("https://example.com", { method: "POST", body: JSON.stringify({ foo: "bar" }), headers: { "Content-Type": "application/json", }, }); const body = await res.text(); console.log(body);
上面的代码将向 https://example.com
发送一个 POST 请求,并在请求体中发送 JSON 数据。
使用第三方的 HTTP 模块
Deno 中有几个流行的第三方 HTTP 模块,比如 oak
和 attain
,它们提供了更加灵活和强大的 HTTP 请求和响应处理能力。在本文中,我们以 oak
为例来介绍如何使用第三方的 HTTP 模块。
oak
对于 HTTP 请求和响应的处理都是通过中间件来实现的。一个典型的 HTTP 请求和响应处理流程如下:
import { Application, Router } from "https://deno.land/x/oak/mod.ts"; const app = new Application(); const router = new Router(); router.get("/", (ctx) => { ctx.response.body = "Hello, World!"; }); app.use(router.routes()); await app.listen({ port: 8000 });
上述代码使用 oak
创建了一个 HTTP 服务,监听 8000 端口,当客户端访问根路由 /
时,返回字符串 Hello, World!
。在这个例子中,router.get()
方法注册了一个 GET 请求处理函数,当客户端发送 GET 请求时,触发该处理函数,其中 ctx
是上下文对象,可以通过它来设置响应头、响应体等。
HTTP 响应
处理完 HTTP 请求后,需要向客户端返回响应。在 Deno 中向客户端发送 HTTP 响应可以使用 fetch
API 和 oak
模块。
使用 fetch
API
使用 fetch
API 返回 HTTP 响应的方式与浏览器中的 fetch
相同,示例代码如下:
const body = "Hello, World!"; const res = new Response(body, { headers: { "Content-Type": "text/plain", }, status: 200, });
上面的代码构造了一个 HTTP 响应体,响应体的内容是 Hello, World!
,响应状态码是 200
,响应头为 Content-Type: text/plain
。
如果需要向客户端发送 JSON 数据,可以使用如下代码:
const body = { foo: "bar" }; const res = new Response(JSON.stringify(body), { headers: { "Content-Type": "application/json", }, status: 200, });
上面的代码构造了一个 HTTP 响应体,响应体的内容是 JSON 格式的数据 { "foo": "bar" }
,响应状态码是 200
,响应头为 Content-Type: application/json
。
使用 oak
模块
使用 oak
模块返回 HTTP 响应可以通过 ctx
对象来实现,示例代码如下:
import { Application, Router } from "https://deno.land/x/oak/mod.ts"; const app = new Application(); const router = new Router(); router.get("/", (ctx) => { ctx.response.body = "Hello, World!"; }); app.use(router.routes()); await app.listen({ port: 8000 });
上述代码使用 oak
创建了一个 HTTP 服务,监听 8000 端口,当某个客户端访问根路由 /
时,返回字符串 Hello, World!
。在这个例子中,ctx.response.body
属性设置了响应体的内容,ctx.response.headers
属性设置了响应头的内容。
总结
本文介绍了 Deno 中处理 HTTP 请求和响应的两种方式:使用内置的 fetch
API 和使用第三方的 HTTP 模块。同时,本文还提供了使用示例代码和指导意义,希望读者在学习和实践中能够更加深入地理解和应用。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a77a57add4f0e0ff099153