前言
Deno 是一个新兴的 TypeScript 运行时环境,它配备了一个强大的权限模型和第三方模块管理系统。与 Node.js 不同的是,Deno 不需要安装任何依赖项即可运行 TypeScript 中的代码,而且通过使用安全沙箱机制,Deno 可以让你避免恶意代码威胁。在使用 Deno 开发应用程序时,有时需要在服务器端提供静态资源,例如网页或图片文件等,本文将介绍如何在 Deno 应用程序中使用静态资源服务器来完成这项工作。
准备工作
首先,我们需要创建一个 Deno 项目,确保已经安装了 Deno 运行时环境,可以按照以下命令安装:
$ curl -fsSL https://deno.land/x/install/install.sh | sh
在安装成功后,运行以下命令,确认 Deno 安装成功:
$ deno --version
接下来,我们需要在项目中引入一些依赖项,以便我们可以轻松地实现静态资源服务器。我们将使用一些流行的第三方模块来完成这个任务:
import { serve } from "https://deno.land/std/http/server.ts"; import * as path from "https://deno.land/std/path/mod.ts"; import { extname } from "https://deno.land/std/path/mod.ts";
以上代码中,我们引入了 serve
、 path
和 extname
三个模块, serve
用于创建 HTTP 服务器, path
用于处理文件路径, extname
用于获取文件扩展名,这些模块将帮助我们在 Deno 应用程序中正确地实现静态资源服务器。
实现静态资源服务器
在引入必要的依赖项后,我们可以开始编写实现静态资源服务器的应用程序代码:
// javascriptcn.com 代码示例 const server = serve({ port: 3000 }); // 创建 HTTP 服务器 console.log("静态资源服务器已启动,监听端口:3000"); for await (const req of server) { const { url } = req; // 获取文件路径 const filePath = path.join(Deno.cwd(), url); try { const fileInfo = await Deno.stat(filePath); // 获取文件信息 if (fileInfo.isDirectory) { throw new Error("输入的路径是目录,无法提供服务。"); } // 读取文件内容并返回响应 const fileContent = await Deno.readFile(filePath); const mimeType = extname(filePath); req.respond({ body: fileContent, headers: new Headers({ "content-type": mimeType }) }); } catch (error) { req.respond({ status: 404, body: "文件不存在。" }); } }
以上代码中,我们首先使用 serve()
方法创建了一个 HTTP 服务器,监听 3000
端口,接下来,我们使用 for await
循环来处理客户端的请求,其中, url
属性获取客户端请求的 URL,我们使用 path.join(Deno.cwd(), url)
获取客户端请求的文件路径,然后,通过使用 Deno.stat(filePath)
方法获取文件信息,我们可以判断文件是否存在,如果存在,则读取文件内容,并设置 HTTP 响应头部中的 content-type
,最后返回 HTTP 响应。
使用静态资源服务器
运行 Deno 应用程序并访问链接:
$ deno run --allow-net --allow-read server.ts
后面,我们可以在浏览器中访问 http://localhost:3000
,这样我们就可以获得一个静态资源服务器,可以在其中包含 HTML 文件、图像文件、CSS 文件、JavaScript 文件等静态资源。
总结
在本文中,我们介绍了如何在 Deno 应用程序中使用静态资源服务器,通过引入一些第三方模块,我们可以轻松地实现这个任务。通过使用 Deno 和 TypeScript,我们可以创建强大且安全的应用程序,希望这篇文章能够对您有所帮助。您可以在以下链接中查看完整的代码示例:
$ git clone https://github.com/JohnWuIPHub/deno-serve-static.git
感谢您的阅读,祝您学习愉快!
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653e406d7d4982a6eb7cc6e9