在线教育成为了近年来的热门话题,面对这个庞大的市场,如何构建一个稳定且易于扩展的网站是每个技术人员必备的技能。本文将介绍如何使用 Deno 构建一个简单的在线教育网站。我们将使用 TypeScript + Oak + MongoDB 来完成这个项目。
前置准备
在开始之前,您需要安装 Deno,并准备好 MongoDB 数据库。如果您不熟悉 Deno 和 MongoDB,建议您先阅读相关文档。
项目目录结构
首先我们创建一个新目录作为我们的项目根目录。在其中创建三个目录分别是 src
、static
、views
,以及一个名为 deps.ts
的文件。
-- -------------------- ---- ------- -- --- - -- ------ - -- ---------- - - -- --------- - - -- ---------- - - -- --- - -- ----- - - -- --------- - - -- ---------- - - -- --- -- ------ - -- --- - -- ------ - -- --- -- ----- - -- ------ - -- -------- - -- ------ - -- ------- - -- --- -- -------
接下来,我们将依次解释这些目录和文件的作用。
src
src
目录将包含所有的服务器端代码。除了 app.ts
的入口文件之外,我们还将在 src
中创建 controller
和 model
目录,用于存放路由控制器和数据模型。
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 数据库连接字符串的地方,您需要根据实际情况进行修改。在项目根目录下,可以执行以下命令运行应用程序:
$ deno run --allow-net --allow-read ./src/app.ts
然后,在浏览器中输入 http://localhost:8000
就可以访问网站了。
总结
本文中我们演示了如何使用 Deno 进行构建简单的在线教育网站。我们使用了 TypeScript、Oak、MongoDB 和 Pug 等技术栈。由于 Deno 是服务器端 JavaScript 和 TypeScript 运行时平台,所以它与最新的 JavaScript 规范相符,可以提供更好的数据灵活性和性能,从而保持我们的服务器端程序更清晰、更简洁、更易维护。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a801ee48841e98944a2581