前言
Deno 是一个新兴的 JavaScript 和 TypeScript 运行时环境,它由 Node.js 的创始人 Ryan Dahl 开发,并且在很多方面都比 Node.js 更加现代化和安全。Oak 是一个基于 Deno 的轻量级 Web 框架,它的设计理念是简单、易用、可扩展和高性能。
本文将介绍如何使用 Deno 和 Oak 创建一个带有登录和注册功能的 Web 应用程序。我们将使用 Deno 自带的标准库和 Oak 框架来实现这个应用程序,同时会介绍一些常用的 Deno 和 Oak 的基本用法和技巧。希望本文能够对前端开发者学习 Deno 和 Oak 以及构建 Web 应用程序有所帮助。
准备工作
在开始之前,我们需要先安装 Deno 和 Oak。Deno 的安装非常简单,只需要运行如下命令即可:
- ---- ----- -------------------------------------- - --
安装完成之后,可以运行 deno --version
命令来检查是否安装成功。如果输出了 Deno 的版本号,则说明安装成功。
Oak 的安装也非常简单,只需要在项目目录下运行如下命令即可:
- ---- ------- ----------- ------------ ------------------------------
这个命令会自动下载和安装 Oak 框架,并且会将 Oak 命令行工具添加到系统的 PATH 环境变量中。安装完成之后,可以运行 oak --version
命令来检查是否安装成功。如果输出了 Oak 的版本号,则说明安装成功。
创建项目
在准备工作完成之后,我们就可以开始创建项目了。首先,我们创建一个空目录,并在该目录下创建一个 app.ts
文件,用于编写 Web 应用程序的代码。然后,我们在 app.ts
文件中导入 Oak 框架,并创建一个 Oak 应用程序对象,代码如下:
------ - ----------- - ---- --------------------------------- ----- --- - --- --------------
这里,我们使用 ES6 的模块化语法来导入 Oak 框架的 Application
类,并创建了一个名为 app
的 Oak 应用程序对象。Application
类是 Oak 框架的核心类,它封装了 HTTP 服务器和中间件系统,可以方便地创建和管理 Web 应用程序。
添加中间件
接下来,我们需要为 Oak 应用程序对象添加一些中间件,以实现 Web 应用程序的功能。中间件是一个函数或一组函数,它们在处理 HTTP 请求和响应的过程中,可以对请求和响应进行修改、拦截、转发、缓存等操作。
我们需要添加的中间件包括:
logger
中间件:用于记录 HTTP 请求和响应的信息,包括请求方法、URL、响应状态码、响应时间等;errorHandler
中间件:用于捕获和处理 HTTP 请求和响应的错误,包括异常、超时、错误码等;static
中间件:用于提供静态文件服务,包括 HTML、CSS、JavaScript、图片等;bodyParser
中间件:用于解析 HTTP 请求的消息体,包括 JSON、表单、文件等;router
中间件:用于处理 HTTP 请求的路由,包括处理不同的 URL 请求、请求方法、参数等。
我们可以使用 Oak 自带的中间件库来添加这些中间件,代码如下:
------ - ------------ ------ - ---- --------------------------------- ------ - ------- ------------- ------------ ---------- - ---- ---------------------------------------- ----- --- - --- -------------- ---------------- ---------------------- --------------------- -------------------- ------------------------- ---------------------------------
这里,我们使用 ES6 的模块化语法来导入 Oak 框架的 Router
类和中间件库,并将这些中间件添加到 Oak 应用程序对象中。Router
类是 Oak 框架的路由类,它可以根据不同的 URL 请求和请求方法,调用对应的处理函数来处理请求,并将处理结果返回给客户端。
添加路由处理函数
接下来,我们需要为路由添加处理函数,以处理不同的 URL 请求和请求方法。我们需要添加的路由处理函数包括:
GET /
:用于显示登录页面;GET /register
:用于显示注册页面;POST /register
:用于处理注册请求;POST /login
:用于处理登录请求;GET /logout
:用于处理注销请求。
我们可以使用 Router
类的方法来添加这些路由处理函数,代码如下:
------ - ------------ ------ - ---- --------------------------------- ------ - ------- ------------- ------------ ---------- - ---- ---------------------------------------- ----- --- - --- -------------- ----- ------ - --- --------- --------------- ----- -- - ----------------- - ------- -------- --- ---------------- ---------------------- --------------------- -------------------- ------------------------- ---------------------------------
这里,我们使用 router.get()
方法来添加 GET /
路由处理函数,它会返回一个字符串 "Hello, World!"。我们可以在浏览器中访问 http://localhost:8000/
来测试这个路由处理函数是否生效。
添加登录和注册功能
接下来,我们需要为 Web 应用程序添加登录和注册功能。我们可以使用 Deno 自带的标准库来实现这些功能,包括读写文件、加密密码、生成随机数等。
我们需要添加的登录和注册功能包括:
- 注册功能:
- 输入用户名、密码和确认密码;
- 检查用户名是否已存在;
- 检查密码和确认密码是否一致;
- 对密码进行加密处理;
- 将用户名和加密后的密码保存到文件中。
- 登录功能:
- 输入用户名和密码;
- 检查用户名和密码是否匹配;
- 如果匹配,则生成一个随机的会话 ID,并将会话 ID 和用户名保存到内存中;
- 将会话 ID 发送给客户端,并在客户端保存为 Cookie。
我们可以使用 Router
类的方法来添加这些路由处理函数,代码如下:
------ - ------------ ------ - ---- --------------------------------- ------ - ------- ------------- ------------ ---------- - ---- ---------------------------------------- ------ - ----- ------ - ---- ------------------------------------ ------ - -- -- ---- - ---- ------------------------------------ ----- --- - --- -------------- ----- ------ - --- --------- --- -------- - --- ----------- ---------- --------------- ----- -- - ----------------- - - --------- --------- ----- ------------- ---------------- ----- ------------------------ ------ ----------- ---------------- ------ ----- ------------------------ ------ --------------- ---------------- ------ ----- ------ ------------- -------------- ------ ------- -------- ---- -- -------- -- ------------------------- ----------- -- --- ----------------------- ----- -- - ----------------- - - ------------ --------- ----- ------------- ------------------- ----- ------------------------ ------ ----------- ---------------- ------ ----- ------------------------ ------ --------------- ---------------- ------ ----- -------------- ----------------- ------ --------------- ------------------------ ------ ----- ------ ------------- ----------------- ------ ------- ---------- ---- -- -------- -- -------------- ----------- -- --- ------------------------ ----- ----- -- - ----- - --------- --------- ---------------- - - ----- ------------------------- ----- ----- - ---------------- --------------------------------- -- ----------------- - ------------------- - ---- ----------------- - - ------ --------- ------- ------- -- ------- - -- --------- --- ----------------- - ------------------- - ---- ----------------- - - ------ ---------- -- --- ------ -- ------- - ----- ---- - ---------------- ----- -------------- - ----- ------------- - ------ --------------- - - ----- -------------- -- ----- -------------------------------- ----------------------- ----------------- - - -------- ------------- ----------- -- --- --------------------- ----- ----- -- - ----- - --------- -------- - - ----- ------------------------- ----- ----- - ---------------- --------------------------------- -- ------------------ - ------------------- - ---- ----------------- - - ------ -------- -------- -- --------- -- ------- - ----- - ----- -------------- - - ---------------- ----- -------- - ----- --------------- - ----- ---------------- -- ----------- - ------------------- - ---- ----------------- - - ------ -------- -------- -- --------- -- ------- - ----- --------- - ---------------- ----------------------- ---------- ---------------------------- ----------- ----------------- - - -------- ------ ----------- -- --- --------------------- ----- ----- -- - ----- --------- - ----------------------------- -- ----------- -- ------------------------- - ------------------- - ---- ----------------- - - ------ -------- --- ------ -- ------- - --------------------------- -------------------------------- ----------------- - - -------- ------- ----------- -- --- ---------------- ---------------------- --------------------- -------------------- ------------------------- ---------------------------------
这里,我们使用 router.get()
和 router.post()
方法来添加路由处理函数,分别对应 GET
和 POST
请求方法。在注册处理函数中,我们首先读取 users.json
文件,然后检查用户名是否已存在,如果不存在,则对密码进行加密处理,并将用户名和加密后的密码保存到 users.json
文件中。在登录处理函数中,我们首先读取 users.json
文件,然后检查用户名和密码是否匹配,如果匹配,则生成一个随机的会话 ID,并将会话 ID 和用户名保存到内存中,然后将会话 ID 发送给客户端,并在客户端保存为 Cookie。在注销处理函数中,我们首先检查客户端是否有保存会话 ID,如果有,则删除内存中保存的会话 ID,并删除客户端的 Cookie。
运行应用程序
在添加完所有的路由处理函数之后,我们就可以运行应用程序了。我们可以使用如下命令来启动应用程序:
- ---- --- ----------- ------------ ------------- ------
这个命令会启动一个 HTTP 服务器,并监听在 8000 端口上。我们可以在浏览器中访问 http://localhost:8000/
来测试登录和注册功能。
总结
本文介绍了如何使用 Deno 和 Oak 创建一个带有登录和注册功能的 Web 应用程序。我们使用 Deno 自带的标准库和 Oak 框架来实现这个应用程序,同时介绍了一些常用的 Deno 和 Oak 的基本用法和技巧。希望本文能够对前端开发者学习 Deno 和 Oak 以及构建 Web 应用程序有所帮助。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/66135220d10417a2223b9629