使用 Deno 构建一个简单的在线教育网站

阅读时长 17 分钟读完

在线教育成为了近年来的热门话题,面对这个庞大的市场,如何构建一个稳定且易于扩展的网站是每个技术人员必备的技能。本文将介绍如何使用 Deno 构建一个简单的在线教育网站。我们将使用 TypeScript + Oak + MongoDB 来完成这个项目。

前置准备

在开始之前,您需要安装 Deno,并准备好 MongoDB 数据库。如果您不熟悉 Deno 和 MongoDB,建议您先阅读相关文档。

项目目录结构

首先我们创建一个新目录作为我们的项目根目录。在其中创建三个目录分别是 srcstaticviews,以及一个名为 deps.ts 的文件。

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

接下来,我们将依次解释这些目录和文件的作用。

src

src 目录将包含所有的服务器端代码。除了 app.ts 的入口文件之外,我们还将在 src 中创建 controllermodel 目录,用于存放路由控制器和数据模型。

static

static 目录包含所有的前端代码,例如 CSS、JavaScript 和图片等文件。

views

views 目录包含所有的视图模板、错误页面和局部视图。

deps.ts

deps.ts 文件是 Deno 中的依赖文件,在该文件中我们将声明和导入所有的依赖项和第三方模块。

依赖

deps.ts 导入我们的第三方依赖项。

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

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

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

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

数据模型

我们将使用 MongoDB 作为我们的数据库。在 src/model 目录中,我们将创建一个 BaseModel 类用于 Mongo 数据库操作方法的实现。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

路由控制器

src/controller 目录中,我们将创建一个 BaseController 类,以及一些为具体数据模型定义的路由控制器。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

入口文件

最后是 src/app.ts 中的代码,这是我们应用程序的入口点。

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

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

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

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

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

视图模板

views 目录中,我们将创建所有的视图模板文件和局部视图文件。在本示例中我们使用了 Pug 作为我们的视图引擎。 在视图模板中,您可以使用 Pug 的标记语言结构我们的 HTML 结构。

运行示例

请注意,在示例代码中涉及到 MongoDB 数据库连接字符串的地方,您需要根据实际情况进行修改。在项目根目录下,可以执行以下命令运行应用程序:

然后,在浏览器中输入 http://localhost:8000 就可以访问网站了。

总结

本文中我们演示了如何使用 Deno 进行构建简单的在线教育网站。我们使用了 TypeScript、Oak、MongoDB 和 Pug 等技术栈。由于 Deno 是服务器端 JavaScript 和 TypeScript 运行时平台,所以它与最新的 JavaScript 规范相符,可以提供更好的数据灵活性和性能,从而保持我们的服务器端程序更清晰、更简洁、更易维护。

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

纠错
反馈