前言
目前,Node.js 是最广泛使用的服务器端 JavaScript 运行环境之一。然而,近年来,Deno 也崭露头角。Deno 和 Node.js 相比,有一些明显的优点,例如更好的安全性、更好的模块化设计、更好的 TypeScript 支持等。在本文中,我们将探讨如何使用 Deno 搭建一个基本的 Restful API 服务器并提供最佳实践。
安装 Deno
首先,我们需要安装 Deno。具体安装步骤可以参考官方文档。在安装完毕后,我们可以通过以下命令来检查 Deno 是否安装成功:
deno --version
如果命令能够正常输出 Deno 的版本号,则说明安装成功。
创建项目
接下来,我们将创建一个新的项目。我们可以将项目的根目录命名为 "deno-restful-api"。可以通过以下命令来创建一个新的项目:
mkdir deno-restful-api cd deno-restful-api
编写代码
接下来,我们将在项目中编写代码。我们将使用 Oak 框架来编写我们的 Restful API 服务器。Oak 框架是一个简单且易于使用的 Web 框架,具有类似于 Express.js 的 API 设计。
第一步:安装 Oak
在项目的根目录下,我们可以通过以下命令来安装 Oak:
deno install --allow-net --allow-read https://deno.land/x/oak/mod.ts
第二步:创建一个基本的 Restful API 路由
现在我们可以开始编写代码了。我们将创建一个名为 "app.ts" 的文件来实现我们的 Restful API 服务器。首先,我们需要导入 Oak 模块和 Application 类:
import { Application } from "https://deno.land/x/oak/mod.ts";
然后,我们可以创建一个名为 "app" 的新应用程序实例:
const app = new Application();
现在,在我们创建的应用程序实例上,我们可以使用 .use()
方法来添加中间件。在这个例子中,我们将添加一个中间件函数来处理所有的请求:
app.use(async (ctx) => { ctx.response.body = "Hello, world!"; });
我们可以看到,上面的代码只是简单地返回一条消息。接下来,我们将定义多个路由来处理不同的 HTTP 动作和 URL。
第三步:定义路由
在本教程的下一部分中,我们将创建一个用于管理用户的基本 Restful API。我们将涵盖HTTP 请求的各个方面,并展示实际的代码示例来说明如何在 Deno 中实现。
在 "app.ts" 文件的顶部,我们需要定义一个名为 "users" 的数组来保存我们的示例用户数据:
// javascriptcn.com 代码示例 interface User { id: string; name: string; email: string; } let users: User[] = [ { id: "1", name: "Alice", email: "alice@example.com", }, { id: "2", name: "Bob", email: "bob@example.com", }, ];
1. GET 路由
首先,我们需要定义一个 GET 路由,以提供所有的用户数据。可以通过以下代码实现:
app.use(async (ctx) => { if (ctx.request.url.pathname === "/users") { ctx.response.body = { users, }; } });
2. POST 路由
接下来,我们需要添加一个 POST 路由来添加一个新的用户。可以通过以下代码实现:
// javascriptcn.com 代码示例 app.use(async (ctx) => { if (ctx.request.url.pathname === "/users" && ctx.request.method === "POST") { const body = await ctx.request.body(); const { name, email } = await body.value; const id = new Date().getTime().toString(); users.push({ id, name, email }); ctx.response.status = 201; ctx.response.body = { user: { id, name, email }, }; } });
3. PUT 路由
接下来,我们需要添加一个 PUT 路由,以更新现有的用户数据。可以通过以下代码实现:
// javascriptcn.com 代码示例 app.use(async (ctx) => { if ( ctx.request.url.pathname.match(/^\/users\/([a-zA-Z0-9-_]+)$/) && ctx.request.method === "PUT" ) { const userId = ctx.request.url.pathname.split("/")[2]; const body = await ctx.request.body(); const { name, email } = await body.value; const userIndex = users.findIndex((user) => user.id === userId); if (userIndex > -1) { users[userIndex] = { ...users[userIndex], name, email, }; ctx.response.status = 200; ctx.response.body = { user: users[userIndex], }; } else { ctx.response.status = 404; } } });
4. DELETE 路由
最后,我们需要添加一个 DELETE 路由,以删除现有的用户数据。可以通过以下代码实现:
// javascriptcn.com 代码示例 app.use(async (ctx) => { if ( ctx.request.url.pathname.match(/^\/users\/([a-zA-Z0-9-_]+)$/) && ctx.request.method === "DELETE" ) { const userId = ctx.request.url.pathname.split("/")[2]; const userIndex = users.findIndex((user) => user.id === userId); if (userIndex > -1) { const user = users[userIndex]; users = users.filter((user) => user.id !== userId); ctx.response.status = 200; ctx.response.body = { user, }; } else { ctx.response.status = 404; } } });
第四步:启动应用程序
现在,我们已经创建了所有必需的路由。接下来,我们需要启动我们的应用程序。我们需要添加以下代码到 "app.ts" 文件的末尾:
await app.listen({ port: 8000 }); console.log("Server listening on port 8000");
运行应用程序
最后,我们可以运行我们的应用程序。在终端中,我们可以通过以下命令启动 Deno:
deno run --allow-net --allow-read app.ts
此时,我们的应用程序正在监听在端口8000上。我们可以打开浏览器,并访问localhost:8000来查看结果。
总结
在本文中,我们已经学习了如何使用Denooak框架来构建Restful API服务器。我们也看到了如何处理HTTP请求,以及如何在Denoupp中编写路由,以及如何处理以这些路由发出的HTTP请求。希望这篇文章对你有所帮助!
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6541f8757d4982a6ebb9b0db