作为一名前端开发者,我们可能会选择 Node.js 作为后端开发工具,但是最近更新的一个新兴技术,Deno,已经被越来越多的开发者所青睐。Deno 是一款基于 Rust 和 V8 引擎的 JavaScript/TypeScript 运行时环境,与 Node.js 相比,Deno 具有更好的安全性,并且不需要使用 npm,它具有更好的模块化和自动化管理,同时也拥有更丰富的 API 库,例如 Http Server。
本篇文章将会介绍如何使用 Deno 的 Http Server 库构建 Web 应用。下面是详细介绍:
第一步:安装 Deno
使用 Deno 构建 Web 应用前,需要将其安装在本地环境中,在 Deno 的官网上下载并安装即可通过命令行进行使用。
安装完 Deno 后,可以通过运行以下命令进行确认安装是否成功。
deno --version
第二步:创建 Http Server
创建 Http Server 服务前,首先需要导入 Deno 的 Http 服务库。
import { serve, ServerRequest, } from 'https://deno.land/std/http/server.ts';
接下来创建一个服务器。示例代码如下:
const server = serve({ port: 8000 }); console.log('http://localhost:8000/'); for await (const request: ServerRequest of server) { request.respond({ body: 'Hello World\n' }); }
接下来解释一下上述代码。
- serve({ port: 8000 }):启动一个监听 8000 端口的 Http 服务。
- for await (const request: ServerRequest of server):此处使用 for 循环配合 async/await 异步操作实现监听 HTTP 请求。
- request.respond({ body: 'Hello World\n' }): 返回一个简单的 Hello World 字符串。
在第二步的示例代码中,我们创建了一个简单的服务器并对客户端请求作出了回应。
第三步:构建动态路由
前面提到了,Denos 具有模块化和自动化管理,可以通过模块化方式来构建更为复杂的应用,例如动态路由的实现。以下为示例:
// javascriptcn.com 代码示例 interface Book { id: number; title: string; author: string; price: number; } let books: Book[] = [ { id: 1, title: '书名', author: '作者名', price: 50 }, { id: 2, title: '书名', author: '作者名', price: 80 }, ]; for await (const req of server) { const url = new URL(req.url, `http://${req.headers.get('host')}`); let statusCode = 404; let respBody = '页面不存在'; if (url.pathname === '/api/books') { // 处理所有书籍列表 if (req.method === 'GET') { statusCode = 200; respBody = JSON.stringify(books); } else if (req.method === 'POST') { // 创建一个新书籍 const bodyJson = JSON.parse(new TextDecoder().decode(await Deno.readAll(req.body))); books.push({ id: books.length + 1, ...bodyJson, }); statusCode = 201; respBody = '新书籍已添加'; } } else if (url.pathname.indexOf('/api/book/') === 0) { const bookId = url.pathname.split('/')[3]; const book = books.find((book) => book.id === parseInt(bookId)); if (!book) { statusCode = 404; respBody = '书籍未找到'; } else { if (req.method === 'GET') { statusCode = 200; respBody = JSON.stringify(book); } else if (req.method === 'DELETE') { const bookIndex = books.findIndex((book) => book.id === parseInt(bookId)); books.splice(bookIndex, 1); statusCode = 204; respBody = ''; } else if (req.method === 'PUT') { const bookIndex = books.findIndex((book) => book.id === parseInt(bookId)); const bodyJson = JSON.parse(new TextDecoder().decode(await Deno.readAll(req.body))); books[bookIndex] = { id: books[bookIndex].id, ...bodyJson, }; statusCode = 200; respBody = ''; } } } const headers = new Headers(); headers.set('Content-Type', 'application/json; charset=utf-8'); await req.respond({ status: statusCode, body: respBody, headers, }); }
代码示例逻辑:
- 定义一个接口 Book,属性包括 ID(书籍编号)、Title(书籍名称)、Author(书籍作者)和 Price(书籍价格)。
- 定义并初始化一个数组 books,存储拥有 Book 属性的对象。以数组形式为每本书籍生成唯一的 id 值并可通过此 id 值进行快速查询。
- 处理 /api/books 路径,此处处理新书籍的创建以及获取所有的书籍列表。
- 处理 /api/book/[BookId],此处处理查询、删除和更新指定 id 的书籍。
总结
使用 Deno 编写 Web 应用的 Http Server 库是一个不错的选择,它简化了应用程序的创建,提高了安全性,同时具有更好的模块化和自动化管理。希望本文对您有所帮助,勇于尝试试试 Deno 吧!
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654531e17d4982a6ebef66d8