入门 Deno 框架:构建一个简单的博客应用

阅读时长 14 分钟读完

Deno 是一个新兴的 JavaScript/TypeScript 运行时。它的设计目标是安全性和可维护性,以及对现代 JavaScript 和 TypeScript 的支持。在本文中,我们将使用 Deno 构建一个简单的博客应用程序,展示如何使用 Deno 构建 Web 应用程序。

安装 Deno

首先,您需要在本地安装 Deno。您可以从 Deno 的官方网站 https://deno.land/ 下载适用于您的操作系统的二进制文件。安装完成后,您可以在终端中运行以下命令以验证 Deno 是否正确安装:

如果您看到了 Deno 的版本信息,那么说明您已经成功安装了 Deno。

初始化项目

接下来,我们将创建一个新的 Deno 项目。在终端中,进入您要创建项目的目录,并运行以下命令:

该命令将下载一个示例文件,并将其保存在当前目录中。您可以将该文件命名为 app.ts

安装依赖项

在我们开始编写应用程序之前,我们需要安装一些 Deno 的依赖项。我们将使用一个名为 Oak 的框架来构建我们的应用程序。Oak 是一个轻量级的 Web 框架,它提供了一些基本的中间件和路由功能。在终端中,运行以下命令以安装 Oak:

编写应用程序

现在,我们已经准备好开始编写我们的应用程序了。我们将创建一个简单的博客应用程序,其中包含以下功能:

  • 创建新文章
  • 获取所有文章
  • 获取单个文章
  • 更新文章
  • 删除文章

首先,在 app.ts 文件中导入 Oak:

然后,我们将创建一个名为 router 的新路由器,并定义一些基本的路由:

-- -------------------- ---- -------
----- ------ - --- ---------

--------------- ----- -- -
  ----------------- - ------ --------
---

-------------------- ----- ----- -- -
  -- ----- ------
---

------------------------ ----- ----- -- -
  -- ----- ------
---

--------------------- ----- ----- -- -
  -- ----- -----
---

------------------------ ----- ----- -- -
  -- ----- ----
---

--------------------------- ----- ----- -- -
  -- ----- ----
---

在这里,我们定义了五个路由,分别对应于上述五个功能。我们将在稍后的部分中实现它们。

接下来,我们需要创建一个名为 app 的新应用程序,并将路由器添加到应用程序中:

最后,我们需要将应用程序绑定到一个端口上,以便我们可以访问它。在 app.ts 文件的末尾,添加以下代码:

现在,我们已经完成了应用程序的基本架构。接下来,我们将实现每个路由的功能。

获取所有文章

router.get("/posts") 路由中,我们需要获取所有文章并将它们返回给客户端。我们将使用一个名为 db.json 的 JSON 文件来存储文章。在 app.ts 文件的开头,添加以下代码:

该代码将打开名为 db.json 的文件,如果文件不存在则创建它,并将文件内容解析为一个名为 articles 的数组。

现在,我们可以在 router.get("/posts") 路由中获取所有文章:

获取单个文章

router.get("/posts/:id") 路由中,我们需要获取特定 ID 的文章并将其返回给客户端。在该路由中,我们将使用 URL 参数来指定文章的 ID。我们将使用 params 对象来获取 URL 参数值。在 router.get("/posts/:id") 路由中,添加以下代码:

-- -------------------- ---- -------
----- -- - --------------

----- ------- - ----------------- ---- -- ---- --- ----

-- ---------- -
  ------------------- - ----
  ----------------- - - -------- ------- --
  -------
-

----------------- - --------

该代码将使用 find 方法查找具有指定 ID 的文章。如果文章不存在,则返回 404 状态码和一个错误消息。

创建新文章

router.post("/posts") 路由中,我们需要创建一个新的文章并将其添加到 articles 数组中。我们将使用请求正文来获取新文章的信息。在 router.post("/posts") 路由中,添加以下代码:

-- -------------------- ---- -------
----- ---- - ----- -------------------

-- ------------------ -- -------------------- -
  ------------------- - ----
  ----------------- - - -------- ----------- --
  -------
-

----- ---------- - -
  --- ------------------------------------ ---
  ------ -----------------
  -------- -------------------
--

--------------------------

----- ------------------- --- ------------------------------------------------

------------------- - ----
----------------- - -----------

该代码将从请求正文中获取文章的标题和内容。如果标题和内容都不为空,则创建一个新文章对象,并将其添加到 articles 数组中。然后,该代码将更新 db.json 文件,并返回新文章对象。

更新文章

router.put("/posts/:id") 路由中,我们需要更新特定 ID 的文章。我们将使用 URL 参数来指定文章的 ID,请求正文来获取更新后的文章信息。在 router.put("/posts/:id") 路由中,添加以下代码:

-- -------------------- ---- -------
----- -- - --------------
----- ---- - ----- -------------------

----- ------------ - ---------------------- ---- -- ---- --- ----

-- ------------- --- --- -
  ------------------- - ----
  ----------------- - - -------- ------- --
  -------
-

---------------------- - -
  --------------------------
  --------------
--

----- ------------------- --- ------------------------------------------------

----------------- - -----------------------

该代码将使用 findIndex 方法查找具有指定 ID 的文章。如果文章不存在,则返回 404 状态码和一个错误消息。否则,该代码将使用扩展运算符将请求正文中的属性合并到文章对象中。最后,该代码将更新 db.json 文件,并返回更新后的文章对象。

删除文章

router.delete("/posts/:id") 路由中,我们需要删除特定 ID 的文章。我们将使用 URL 参数来指定文章的 ID。在 router.delete("/posts/:id") 路由中,添加以下代码:

-- -------------------- ---- -------
----- -- - --------------

----- ------------ - ---------------------- ---- -- ---- --- ----

-- ------------- --- --- -
  ------------------- - ----
  ----------------- - - -------- ------- --
  -------
-

----------------------------- ---

----- ------------------- --- ------------------------------------------------

------------------- - ----

该代码将使用 findIndex 方法查找具有指定 ID 的文章。如果文章不存在,则返回 404 状态码和一个错误消息。否则,该代码将使用 splice 方法从 articles 数组中删除文章。最后,该代码将更新 db.json 文件,并返回 204 状态码。

完整代码

下面是完整的 app.ts 文件:

-- -------------------- ---- -------
------ - ------------ ------ - ---- ---------------------------------

----- ---------------- - ------------
----- ---- - ----- --------------------------- - ------- ----- ----- ----- ------ ---- ---
--- -------- - -------------- -------------------------- ---------------------

----- ------ - --- ---------

--------------- ----- -- -
  ----------------- - ------ --------
---

-------------------- ----- ----- -- -
  ----------------- - ---------
---

------------------------ ----- ----- -- -
  ----- -- - --------------

  ----- ------- - ----------------- ---- -- ---- --- ----

  -- ---------- -
    ------------------- - ----
    ----------------- - - -------- ------- --
    -------
  -

  ----------------- - --------
---

--------------------- ----- ----- -- -
  ----- ---- - ----- -------------------

  -- ------------------ -- -------------------- -
    ------------------- - ----
    ----------------- - - -------- ----------- --
    -------
  -

  ----- ---------- - -
    --- ------------------------------------ ---
    ------ -----------------
    -------- -------------------
  --

  --------------------------

  ----- ------------------- --- ------------------------------------------------

  ------------------- - ----
  ----------------- - -----------
---

------------------------ ----- ----- -- -
  ----- -- - --------------
  ----- ---- - ----- -------------------

  ----- ------------ - ---------------------- ---- -- ---- --- ----

  -- ------------- --- --- -
    ------------------- - ----
    ----------------- - - -------- ------- --
    -------
  -

  ---------------------- - -
    --------------------------
    --------------
  --

  ----- ------------------- --- ------------------------------------------------

  ----------------- - -----------------------
---

--------------------------- ----- ----- -- -
  ----- -- - --------------

  ----- ------------ - ---------------------- ---- -- ---- --- ----

  -- ------------- --- --- -
    ------------------- - ----
    ----------------- - - -------- ------- --
    -------
  -

  ----------------------------- ---

  ----- ------------------- --- ------------------------------------------------

  ------------------- - ----
---

----- --- - --- --------------

-------------------------
---------------------------------

------------------- ------- -- ------------------------

----- ------------ ----- ---- ---

运行应用程序

现在,我们已经完成了我们的应用程序。在终端中,进入 app.ts 文件所在的目录,并运行以下命令:

该命令将启动我们的应用程序,并将其绑定到端口 8000 上。现在,您可以在浏览器中访问 http://localhost:8000,并使用您喜欢的 API 客户端测试我们的应用程序。

总结

在本文中,我们使用 Deno 构建了一个简单的博客应用程序。我们使用了 Oak 框架来处理路由和中间件。我们展示了如何使用 Deno 来读写文件,并使用 JSON 来存储数据。我们还展示了如何使用 URL 参数和请求正文来处理 HTTP 请求。该示例程序仅仅是一个入门级别的示例,但它可以帮助您了解如何使用 Deno 构建 Web 应用程序。如果您想深入了解 Deno,我们建议您查看 Deno 的官方文档。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6584f481d2f5e1655df90b7b

纠错
反馈