Deno 是一个新兴的 JavaScript 和 TypeScript 运行时环境,它的目标是取代 Node.js。与 Node.js 不同的是,Deno 内置了 TypeScript 运行时,支持直接运行 TypeScript 代码。Deno 还提供了一个安全的默认配置,不需要像 Node.js 一样需要安装大量的第三方模块来增强安全性。
在本文中,我们将介绍如何使用 Deno 搭建一个 Web 服务器,包括路由、中间件和静态文件服务等功能。
安装 Deno
在开始之前,我们需要先安装 Deno。在官方网站 https://deno.land/ 上下载适合自己系统的安装包即可,安装完成后可以通过 deno --version
命令来确认是否安装成功。
搭建 Web 服务器
我们先来看一个简单的例子,搭建一个 Web 服务器,监听 8000 端口,并返回一个简单的 "Hello World!" 字符串。
import { serve } from "https://deno.land/std/http/server.ts"; const server = serve({ port: 8000 }); for await (const req of server) { req.respond({ body: "Hello World!\n" }); }
我们使用 serve
函数来创建一个 Web 服务器,它将接收一个配置对象,其中 port
属性指定了监听的端口号。for await
循环会不断监听端口,每当有请求到达时,就会执行回调函数,返回 "Hello World!" 字符串。
路由
在实际开发中,我们需要处理各种不同的请求,例如 GET、POST、PUT、DELETE 等等。这时候我们需要一个路由系统来根据请求的 URL 和方法来分发请求。
以下是一个简单的路由系统例子:
-- -------------------- ---- ------- ------ - ----- - ---- --------------------------------------- ------ - ------ - ---- --------------------------------- ----- ------ - --- --------- --------------- ----- -- - ----------------- - ------ -------- --- ----- ------ - ------- ----- ---- --- --- ----- ------ --- -- ------- - ----- - ------- --- - - ---- ----- ----- - -------------------- ----- -- ------- - ----------- - ---- - ------------- ------- --- --- - -
我们使用了一个第三方模块 oak
中的 Router
类来实现路由。在路由对象中,我们使用 get
方法来定义 GET 请求的路径和回调函数,回调函数中的 ctx
参数是一个请求上下文对象,我们可以通过它来设置响应的内容。
在服务器中,我们首先获取请求的方法和 URL,然后使用路由对象的 match
方法来匹配请求,如果匹配成功,则执行回调函数,否则返回 404 状态码。
中间件
中间件是一种常用的处理请求的方法,它可以在请求到达路由之前或之后对请求进行处理,例如解析请求体、设置响应头、处理错误等等。以下是一个简单的中间件例子:
-- -------------------- ---- ------- ------ - ----- - ---- --------------------------------------- ------ - ------ - ---- --------------------------------- ----- ------ - ----- ----- ----- -- - ---------------------------------- --------------------- ----- ------- -- ----- ------ - --- --------- --------------- ----- -- - ----------------- - ------ -------- --- ----- --- - --- -------------- ---------------- ------------------------- ----- ------ - ------- ----- ---- --- --- ----- ------ --- -- ------- - ----- --- - - -------- --- -- ----- ---------------- -------------------------- -
在这个例子中,我们定义了一个 logger
中间件,它会在每个请求到达时打印请求的方法和 URL。中间件接收两个参数,第一个是请求上下文对象 ctx
,第二个是一个 next
函数,表示下一个中间件或路由处理函数。在中间件中,我们可以对请求进行处理,然后调用 next
函数将请求传递给下一个中间件或路由处理函数。
在服务器中,我们使用 Application
类来创建一个应用程序对象,使用 use
方法来注册中间件和路由,然后使用 handle
方法来处理请求。处理完成后,我们将响应对象返回给客户端。
静态文件服务
在 Web 服务器中,我们经常需要提供静态文件服务,例如 HTML、CSS、JavaScript、图片、视频等等。以下是一个简单的静态文件服务例子:
-- -------------------- ---- ------- ------ - --------- - ---- -------------------------------------------- ------ - ----- - ---- --------------------------------------- ------ - ------ - ---- --------------------------------- ----- ------ - --- --------- --------------- ----- -- - ----------------- - ------ -------- --- -------------------- ----- -- - ----------------- - ------ ------- --- --------------------------- ----- ----- -- - ----- - ---- - - ----------- ----- ---- - ------------------- ----- ---- - ----- ---------------------- ------ ----------------- - ---------- --- ----- --- - --- -------------- ------------------------- ----- ------ - ------- ----- ---- --- --- ----- ------ --- -- ------- - ----- --- - - -------- --- -- ----- ---------------- -------------------------- -
在这个例子中,我们使用 file_server
模块中的 serveFile
函数来提供静态文件服务。我们定义了一个路由,其中 get
方法的路径包含一个参数 name
,表示请求的文件名。在回调函数中,我们首先获取文件路径,然后使用 serveFile
函数来读取文件并返回响应体。
在服务器中,我们使用 Application
类来创建一个应用程序对象,使用 use
方法来注册路由,然后使用 handle
方法来处理请求。处理完成后,我们将响应对象返回给客户端。
总结
在本文中,我们介绍了如何使用 Deno 搭建一个 Web 服务器,包括路由、中间件和静态文件服务等功能。Deno 提供了一个简单易用的 API,让我们可以快速地构建一个 Web 应用程序。同时,Deno 还内置了 TypeScript 运行时,让我们可以直接使用 TypeScript 编写代码,提高开发效率和代码质量。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65e520e01886fbafa40dd07c