我的账户
猩码学苑

专注C++开发菁英教育

亲爱的游客,欢迎!

已有账号,请

如尚未注册?

路由模块化-2023.06.15

[复制链接]
霁后彩虹O 发表于 2023-6-19 19:14:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
今日学习内容:


1. 路由模块化

- 核心思想: 将创建服务器和监听路由拆分成两个模块。
- 优势: 每个js文件都功能单一,有利于项目维护
  - app.js: 创建并开启服务器、托管静态资源、注册其他中间件、==加载路由模块==
  - router.js: 监听路由
1) app.js 整体文件
2) 将所有 app.get 路由监听全都剪切到 router.js 文件中
3) 在 router.js 文件中,创建路由对象,再使用路由对象代替app,最后导出路由对象
Express.Router用法

从Express 4.0开始,路由器功能成了一个单独的组件`Express.Router`。它好像小型的express应用程序一样,有自己的use、get、param和route方法

`Express.Router`是一个构造函数,调用后返回一个路由器实例。然后,使用该实例的HTTP动词方法,为不同的访问路径,指定回调函数;最后,挂载到某个路径。

4) 在 app.js 文件中加载 router.js 模块,并将其注册为中间件
app.js:专注于创建并启动服务器,加载模块并注册为中间件

router.js:专注于路由监听并处理
2.登录页面模块化

思路分析:

1) 创建==/login== 路由用来显 login.html页面

2) 创建 /checkLogin 路由

   ① 接收数据  ---  表单提交的用户名和密码

   ② 编写SQL语句  ---  select * from users where  username=? and userpwd=?

   ③ 执行SQL语句

   ④ 处理SQL执行结果

```
如果查询结果为1条数据,说明用户名和密码正确,成功登录,跳转到 /index

如果查询结果为0条数据,说明用户名或者密码错误,登录失败,跳转回 /login

代码实现步骤:

1) 创建 /login 路由用来显示login.html页面

  创建  router_login.js 模块
2) 创建 /checkLogin 路由

   ① 接收数据  ---  表单提交的用户名和密码

   ② 编写SQL语句  ---  select * from admin where  username=? and userpwd=?

   ③ 执行SQL语句

   ④ 处理SQL执行结果
验证:

  不登录,直接请求  127.0.0.1:3000/index , 依然能够正常看到页面。因为在 /index 中没有验证用户是否登录。

  验证用户名和密码的操作不能使用普通的技术,而是需要使用 会话控制 技术
3. cookie技术

什么是cookie

- cookie是将==数据持久化==存储到==客户端(浏览器)==的一种技术。
- ==服务器==可以将数据写到浏览器中, 一个网站最多能在一个浏览器写20个cookie。
- (Firefox每个域名cookie限制为50个。Opera每个域名cookie限制为30个,Safari/WebKit貌似没有cookie限制。但是如果cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。)
- 一个浏览器能够设置的总cookie数最多为300个,==每个不能超过4kb==。
- cookie既能保存在文件中,也能保存在内存中。

设置cookie

- 核心: ==cookie是随着响应头返回给浏览器的==
- 设置cookie的核心思想: 使用 res.setHeader 或者 writeHead 将cookie信息设置在响应头中
- cookie设置格式:key=value;expires=time
  - key: cookie的名称
  - value: 名称对应的值
  - expires: 有效期
1) 使用 setHeader 来设置cookie
2) 一次性设置多个cookie  --->  使用数组形式、
3) 使用 writeHeader 设置cookie
读取cookie

一旦网站在浏览器设置好cookie之后,浏览器再访问网站时,cookie信息就会随着==请求头==一起发送给服务器

req.url: 保存了请求url地址

req.method: 保存了请求方式

req.headers: 保存了请求头信息

   在headers中有cookie信息
当cookie设置好之后,浏览器访问任何一个路由时,都能将cookie信息发送给服务器,所以,任何一个路由都能使用  req.headers.cookie 获取cookie信息
## cookie有效期

- 设置了expires则有效期到expires指定的时间
- 未设置expires则关闭浏览器cookie即消失
常见的时间格式: GMT( Greenwich Mean Time 格林尼治标准时间) 和  UTC
时间格式装换:toUTCString()
4. 浏览器中查看cookie的三种方式

1 在Network中的请求报文以及响应报文中可以查看到

2 在application( 应用)中可以查看到cookie

3 通过js:document.cookie

5. 浏览器写入cookie

document.cookie = 'isLogin=1'

6. session技术

session介绍

- 因为cookie是保存在==客户端==的数据,不够安全,所以出现了session。
- ==服务器==为了保存用户状态而创建的一个==特殊的对象==
- session会将数据保存到服务器端(保存在文件、内存服务器 数据表中),安全性就可以得到保证。                                                   
express设置session时,需要使用第三方模块 --- express-session shell
npm i express-session

使用步骤:

1) 加载 express-session 模块

2) 将session注册为中间件

3) 使用req.session对象设置/读取session

注意事项:  session 需要一个一个设置,不能直接设置 req.session = {}
## session有效期

- 当浏览器关闭后,session消失
- express-session会将session保存在内存中,每次重启服务器时即使没有关闭浏览器session也会消失
## 删除session

核心: req.session.destroy()    销毁所有session
## session 的有效范围

在一个网站中设置了session,则整个网站都能找到这个session
7. token与session的区别?

1) token和session其实都是为了身份验证,session一般翻译为会话,而token更多的时候是翻译为令牌;

2) session在服务器端会保存一份,可能保存到缓存、文件或数据库;

3) session和token都是有过期时间,都需要去管理过期时间;

4) token的思想是算法验证,session的思想是信息存储对比。

token是有多种方案的,可以设计成无需存储,token同时也是跨域的,session是要存储的,存储在数据库的思想;

5)其实token与session的问题是一种时间与空间的博弈问题

==session是空间换时间,而token是时间换空间==。两者的选择要看具体情况而定;

6)虽然确实都是“客户端记录,每次访问携带”,但 token 很容易设计为自包含的,

也就是说,后端不需要记录什么东西,每次一个无状态请求,每次解密验证,每次当场得出合法 /非法的结论(时间)。


回复

使用道具 举报

关注0

粉丝0

帖子59

发布主题
大家都在学
课堂讨论
一周热帖排行最近7x24小时热帖
关注我们
专注C++菁英教育

客服电话:18009298968

客服时间:9:00-21:00

猩码学苑 - 专注C++开发菁英教育!( 陕ICP备2025058934号-1 )

版权所有 © 陕西菁英数字科技有限公司 2023-2026