在本章中,我们将探讨如何使用 Deno 构建 Web 应用程序。Deno 是一个现代的 JavaScript 和 TypeScript 运行时,它具有许多创新的功能和安全特性,使其成为构建 Web 应用的理想选择。我们将从创建一个简单的 HTTP 服务器开始,逐步深入到更复杂的主题,如处理请求、响应、路由以及使用外部库。
创建基本的 HTTP 服务器
首先,我们需要安装 Deno。可以通过以下命令安装:
curl -fsSL https://deno.land/x/install/install.sh | sh
安装完成后,我们可以通过运行 deno run 来启动一个简单的 HTTP 服务器。下面是一个基本的例子:
import { serve } from "https://deno.land/std@0.168.0/http/server.ts";
const s = serve({ port: 8000 });
console.log("Server running on http://localhost:8000");
for await (const req of s) {
req.respond({ body: "Hello World\n" });
}这个脚本会启动一个 HTTP 服务器,并监听端口 8000。当我们访问 http://localhost:8000 时,将看到“Hello World”。
处理请求与响应
处理不同的请求类型(如 GET、POST 等)和响应是构建 Web 应用程序的关键部分。Deno 提供了强大的工具来处理这些操作。
获取请求参数
在处理请求时,我们可能需要获取 URL 参数或查询字符串。可以使用 url 模块来解析 URL:
import { parse } from "https://deno.land/std@0.168.0/encoding/yaml.ts";
import { parse as parseUrl, UrlWithParsedQuery } from "https://deno.land/std@0.168.0/url/mod.ts";
const url = parseUrl(req.url);
console.log(url.query); // 输出查询字符串对象发送响应
发送响应时,我们可以根据需要设置不同的状态码和头部信息。例如,如果想要发送 JSON 数据作为响应:
// www.javascriptcn.com code example
import { json } from "https://deno.land/std@0.168.0/http/server.ts";
req.respond({
status: 200,
headers: new Headers({
"Content-Type": "application/json",
}),
body: JSON.stringify({ message: "Hello, world!" }),
});路由管理
在实际应用中,我们通常需要根据不同的路径来处理不同的逻辑。Deno 并没有内置的路由系统,但我们可以轻松地自己实现或使用第三方库。
手动实现路由
一个简单的手动实现方法如下:
// www.javascriptcn.com code example
import { serve } from "https://deno.land/std@0.168.0/http/server.ts";
const s = serve({ port: 8000 });
for await (const req of s) {
const url = new URL(req.url);
if (url.pathname === "/hello") {
req.respond({ body: "Hello, world!" });
} else if (url.pathname === "/goodbye") {
req.respond({ body: "Goodbye, world!" });
} else {
req.respond({ status: 404, body: "Not Found" });
}
}使用第三方库
除了手动实现,也可以考虑使用像 Oak 这样的第三方库来简化路由管理。Oak 是一个基于中间件的框架,提供了一个简洁的方式来定义路由和处理请求。
// www.javascriptcn.com code example
import { Application } from "https://deno.land/x/oak/mod.ts";
const app = new Application();
app.use((ctx) => {
ctx.response.body = "Hello, world!";
});
await app.listen({ port: 8000 });中间件
中间件是一种强大的机制,允许我们在请求到达最终处理函数之前或之后执行某些操作。这可以用于日志记录、身份验证等多种用途。
使用中间件
使用 Oak 框架时,中间件的使用非常直观。例如,我们可以添加一个简单的日志中间件:
// www.javascriptcn.com code example
import { Application, Router } from "https://deno.land/x/oak/mod.ts";
const router = new Router();
router.get("/", (ctx) => {
ctx.response.body = "Hello, world!";
});
const app = new Application();
app.use(async (ctx, next) => {
console.log(`Request: ${ctx.request.method} ${ctx.request.url}`);
await next();
});
app.use(router.routes());
app.use(router.allowedMethods());
await app.listen({ port: 8000 });在这个例子中,我们定义了一个中间件来记录每个请求的方法和 URL,然后将其应用到整个应用程序中。
总结
通过以上内容,我们介绍了如何使用 Deno 构建一个简单的 Web 应用程序,包括创建基本的 HTTP 服务器、处理请求和响应、路由管理以及使用中间件。这只是 Deno 能力的一部分,随着你对 Deno 的深入了解,你可以构建出更加复杂和功能丰富的 Web 应用。