使用 Node.js 实现 To Do List 任务管理系统

阅读时长 17 分钟读完

简介

任务管理系统是一种常见的应用程序,它可以帮助我们记录和管理待办事项。在本文中,我们将使用 Node.js 构建一个简单的 To Do List 任务管理系统。本文适合初学者学习 Node.js,并希望构建基本 Web 应用程序。

技术栈

  • Node.js:用于构建后端应用程序。
  • Express.js:用于构建 Web 应用程序。
  • MongoDB:用于存储数据。
  • ejs:模板引擎。

环境搭建

为了开始构建我们的 To Do List 任务管理系统,我们需要确定环境。首先,我们需要安装 Node.js。在安装 Node.js 之后,我们可以使用 npm 包管理器来安装其他必要的软件包。

接下来,我们需要启动 MongoDB 实例。安装 MongoDB 并按照 MongoDB 官方文档 中的说明进行操作。然后,使用以下命令启动 MongoDB:

注意:/path/to/database 应该根据您的实际需要更改。

代码实现

应用程序配置

首先,让我们创建一个名为 app.js 的文件。在此文件中,设置应用程序配置。

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

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

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

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

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

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

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

在上面的代码中,我们创建了一个 Express 应用程序并设置了应用程序配置。其中,我们用了 ejs 作为模板引擎。

创建模型

接下来,我们需要创建一个模型来描述数据库中的数据。在本例中,我们将创建一个名为 Task 的模型。

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

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

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

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

在上面的代码中,我们使用 Mongoose 创建了 Task 模型,并将其导出以供后续使用。该模型包含任务的名称、描述和状态。其中,status 字段是一个枚举值,转换为 'todo''doing' 或者 'done' 的其中一个值。另外,我们使用了一个名为 timestamps 的选项,用于自动添加 createdAtupdatedAt 字段。

实现路由

现在我们将实现一些路由,用户将通过这些路由与应用程序进行交互。

渲染列表视图

首先,我们将创建视图,用于列出所有任务。在视图中,我们将能够查看任务的名称、描述和状态。然后,我们将创建一个路由来渲染列表视图。

首先,我们需要在应用程序根目录下的 views 文件夹中创建名为 index.ejs 的文件。代码如下:

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

然后,我们将创建一个路由,用于渲染列表视图。代码如下:

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

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

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

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

在上面的代码中,我们创建一个名为 '/' 的路由,并通过 Task.find({}) 从数据库中获取所有任务。然后,我们将任务列表和视图名称作为参数传递给 res.render()

渲染新建任务表单

接下来,我们将创建一个表单,用于添加新的任务。在视图中,我们将看到一个表单,该表单允许我们输入任务的名称、描述和状态。然后,我们将创建一个路由,用于渲染新表单。

在应用程序根目录下的 views 文件夹中,创建一个名为 new_task.ejs 的文件。代码如下:

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

然后,我们将创建一个路由,用于渲染新表单。代码如下:

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

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

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

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

在上面的代码中,我们创建了一个名为 /tasks/new 的路由,并渲染了一个名为 new_task 的视图。

处理创建任务表单

接下来,我们将处理上一个步骤中的表单。我们将创建一个路由,用于为提交的表单创建新任务。当我们提交表单时,将发送 POST 请求,此路由将获取请求并将其保存在数据库中。

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

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

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

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

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

在上面的代码中,我们创建了一个名为 /tasks 的路由,并使用 Task.save() 将任务保存在数据库中。如果保存成功,我们将重定向到根路由。否则,将重新呈现表单。

渲染编辑任务表单

现在,我们将创建一个表单,用于编辑任务。这个表单将允许我们更改任务的名称、描述和状态。然后,我们将创建一个路由,用于渲染编辑表单。

在应用程序根目录下的 views 文件夹中,创建一个名为 edit_task.ejs 的文件。代码如下:

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

然后,我们将创建一个路由,用于渲染编辑表单。代码如下:

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

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

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

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

在上面的代码中,我们创建了一个名为 /tasks/:id/edit 的路由,并使用 Task.findById() 查找要编辑的任务。如果成功查找到任务,我们将渲染名为 edit_task 的视图并将任务作为变量传递。

处理编辑任务表单

现在,我们将处理上一个步骤中的表单。我们将创建一个路由,用于更新任务。当我们提交表单时,将发送 PUT 请求,此路由将获取请求并将其更新到数据库中。

在应用程序根目录下的 views 文件夹中,创建一个名为 edit_task.ejs 的文件。代码如下:

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

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

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

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

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

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

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

在上面的代码中,我们创建了一个名为 /tasks/:id 的路由,并使用 Task.findById() 查找要更新的任务。然后,我们将使用 Task.save() 更新任务,并重定向到根路由。

删除任务

最后,我们将创建一个路由,用于删除任务。当我们想要删除一个任务时,我们将使用 DELETE 请求发送到该路由。

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

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

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

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

在上面的代码中,我们创建了一个名为 /tasks/:id 的路由,并使用 Task.findByIdAndDelete() 删除任务。然后,我们将重定向到根路由。

应用程序集成

现在,我们已经创建了所有必要的路由,现在将集成到应用程序中。

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

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

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

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

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

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

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

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

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

在上面的代码中,我们将所有路由加载到应用程序中,并使用 methodOverride 中间件来解析 DELETE 和 PUT 请求。

完成以上工作后,我们现在可以使用 To Do List 任务管理系统。访问 http://localhost:3000/tasks 即可查看所有任务。使用表单添加新任务或编辑现有任务。

总结

在本文中,我们通过使用 Node.js、Express.js 和 MongoDB 构建 To Do List 任务管理系统,了解了如何使用 Node.js 进行 Web 应用程序开发。通过学习本文,您应该增强对以下方面的理解:

  • 如何使用 Node.js 创建服务器端应用程序。
  • 如何使用 Express.js 创建 Web 应用程序。
  • 如何使用 MongoDB 存储和检索数据。

我们希望,借助本文,您能够更好的了解 Node.js 技术的应用,掌握构建实际应用的基本思路。

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

纠错
反馈