Deno 中处理 HTTP 请求和响应

Deno 是一个现代化的 JavaScript 运行环境和脚本语言,支持 TypeScript,并提供了许多 Node.js 中没有的特性。其中一个特性就是处理 HTTP 请求和响应,本文将详细介绍如何在 Deno 中处理 HTTP 请求和响应,并给出示例代码以及指导意义。

HTTP 请求

在 Deno 中处理 HTTP 请求有两种方式:使用内置的 fetch API 和使用第三方的 HTTP 模块。前者类似于浏览器中的 fetch,后者则类似于 Node.js 中的 httphttps 模块。

使用内置的 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 模块,比如 oakattain,它们提供了更加灵活和强大的 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


纠错反馈