介绍
Deno 是一个用于 JavaScript 和 TypeScript 的运行时环境,它由 Ryan Dahl 创建,后者也是 Node.js 的创始人之一。Deno使用一种安全的方式运行 JavaScript,拥有更好的性能和更好的开发者体验。
OAK 框架是 Deno 的 HTTP Web 框架,具有简单易用、易于扩展和异步编程的优点。在本文中,我们将详细介绍如何在 Deno 中使用 OAK 来创建一个简单的 Web 服务器,并提供示例代码和指导意义。
学习目标
- 如何在 Deno 中使用 OAK 框架
- 创建 Web 服务器
- 处理 HTTP 请求(GET、POST、PUT、DELETE)
- 使用中间件
先决条件
在开始本文之前,您应该已经安装了 Deno 运行时,如果还没有安装,请通过 Deno 的 官方文档 进行安装。
创建 Web 服务器
在 Deno 中使用 OAK 创建 Web 服务器非常简单。我们只需要创建一个文件,并在其中编写代码即可。
导入 Oak 模块
我们使用 import
关键字从 oak
模块中导入 Application
类。Application
类是 OAK 框架的核心,它负责管理应用程序的中间件和路由。
import { Application } from "https://deno.land/x/oak/mod.ts";
创建 Web 服务器
接下来,我们将创建一个名为 app
的实例,这是 OAK 应用程序的核心。然后,我们使用 app
实例创建一个路由和中间件。
-- -------------------- ---- ------- ----- --- - --- -------------- ----------- -- - ----------------- - ------- -------- --- ------------------- -- ------- -- ---- -------- ----- ------------ ----- ---- ---
在此代码中,我们使用 app.use()
添加了一个简单的中间件函数。每当请求到达应用程序时,这个函数都会被调用。它设置响应主体为“Hello,World!”。
最后,我们使用 app.listen()
启动 Web 服务器,并在控制台输出 Server is running on port 8000!
。
运行 Web 服务器
保存代码为 server.ts
,使用以下命令在终端中运行应用程序:
deno run --allow-net server.ts
现在,如果打开浏览器并访问 http://localhost:8000
,将会看到返回 Hello, World!
的响应。
处理 HTTP 请求
在 OAK 框架中,我们可以轻松处理 HTTP 请求。下面展示了如何处理 GET、POST、PUT 和 DELETE 请求。
处理 GET 请求
app.use(ctx => { if (ctx.request.method === "GET" && ctx.request.url.pathname === "/") { ctx.response.body = "Hello, World!"; } });
在这个示例中,当请求方法为 GET
且路径为 /
时,将返回 Hello,World!
的响应主体。
处理 POST 请求
app.use(async ctx => { if (ctx.request.method === "POST" && ctx.request.url.pathname === "/") { const body = await ctx.request.body().value; ctx.response.body = `Hello, ${body.get("name")}!`; } });
在此代码中,当请求方法为 POST
且路径为 /
时,将从请求主体中读取名称属性,并返回 Hello,name!
,其中 name
是从请求主体中获取的值。
处理 PUT 请求
app.use(async ctx => { if (ctx.request.method === "PUT" && ctx.request.url.pathname === "/") { const body = await ctx.request.body().value; // Update resource with data from body ctx.response.status = 204; } });
在这个示例中,当请求方法为 PUT
且路径为 /
时,将从请求主体中读取数据以更新资源,并将状态代码设置为 204
。
处理 DELETE 请求
app.use(async ctx => { if (ctx.request.method === "DELETE" && ctx.request.url.pathname === "/") { // Delete resource ctx.response.status = 204; } });
在这个示例中,当请求方法为 DELETE
且路径为 /
时,将删除资源,并将状态代码设置为 204
。
使用中间件
中间件是 OAK 中的一种通用概念,可以更好地组织代码,并添加多个功能。在 OAK 中,中间件可以是异步函数,该函数将接收一个 Context 对象作为参数,并可以修改响应和请求对象。
const log = async (ctx, next) => { console.log(`${ctx.request.method} ${ctx.request.url}`); await next(); }; app.use(log);
在这个示例中,我们定义了一个名为 log
的简单中间件。此中间件将输出通过 HTTP 访问应用程序的请求方法和 URL。然后,我们将这个中间件添加到 app
实例中并称其为 app.use(log)
。
中间件通常被编写为可重复使用的功能,因此可以轻松地添加多个中间件到应用程序中。例如,您可以使用中间件来解析 HTTP 请求主体、添加身份验证逻辑、记录消息等。
结论
在本文中,我们深入研究了如何在 Deno 中使用 OAK 框架创建 Web 服务器。我们在代码中覆盖了 GET、POST、PUT 和 DELETE 请求,并展示了如何使用中间件来更好地组织代码和添加多个功能。
希望这篇文章将有助于您更好地理解 Deno 和 OAK 框架,以及如何创建 Web 服务器。如果您有任何问题或建议,请在下面的评论中告诉我们。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6719a858ad1e889fe2325b0b