Node18.x进阶使用总结(四)

news2024/9/24 13:21:18

Node18.x进阶使用总结之MongoDB7.x

  • 1、接口
    • 1.1、接口的组成
    • 1.2、RESTful API
    • 1.3、json-server
    • 1.4、接口测试工具
      • 1.4.1、apipost
      • 1.4.2、apifox
      • 1.4.3、postman
  • 2、会话
    • 2.1、cookie
      • 2.1.1、特点
      • 2.1.2、cookie的运行流程
      • 2.1.3、cookie的代码操作
    • 2.2、session
      • 2.2.1、session的运行流程
      • 2.2.2、session的代码操作
    • 2.2、cookie和session的区别
    • 2.3、token
      • 2.3.1、token的运行流程
      • 2.3.2、token的特点
      • 2.3.3、JWT
  • 3、本地域名
    • 3.1、操作流程
    • 3.2、原理

配套视频: 尚硅谷2023版Node.js零基础视频教程,nodejs新手到高手
配套代码: https://gitee.com/Augenstern-creator/kuang-study-nodejs
在这里插入图片描述

1、接口

接口是前后端通信的桥梁,接口的作用是实现前后端通信

  • 大多数接口都是由 后端工程师 开发的, 开发语言不限
  • 一般情况下接口都是由 前端工程师 调用的,但有时 后端工程师也会调用接口 ,比如短信接口,支付接口等

这里的接口指的是『数据接口』, 与编程语言(Java,Go 等)中的接口语法不同

1.1、接口的组成

一个接口一般由如下几个部分组成:

  • 请求方法
  • 接口地址(URL)
  • 请求参数
  • 响应结果

接口示例:身份证查询-免费API,收集所有免费的API (free-api.com)

1.2、RESTful API

RESTful API 是一种特殊风格的接口,主要特点有如下几个:

  • URL 中的路径表示 资源 ,路径中不能有 动词 ,例如 create , delete , update 等这些都不能有
  • 操作资源要与 HTTP 请求方法 对应
  • 操作结果要与 HTTP 响应状态码 对应

规则示例:

操作请求类型URL返回
新增歌曲post/song返回新生成的歌曲信息
删除歌曲delete/song/10返回一个空文档
修改歌曲put/song/10返回更新后的歌曲信息
获取所有的歌曲get/song返回歌曲列表数组
获取单个歌曲get/song/10返回单个歌曲信息

扩展阅读:RESTful API 设计指南 - 阮一峰的网络日志 (ruanyifeng.com)

1.3、json-server

json-server 本身是一个 JS 编写的工具包,可以快速搭建 RESTful API 服务

  • 官网地址:typicode/json-server: Get a full fake REST API with zero coding in less than 30 seconds (seriously) (github.com)

操作步骤:

  1. 全局安装json-server
npm i -g json-server
  1. 创建 JSON 文件,编写基本结构
{
  "song": [
    { "id": 1, "name": "干杯", "singer": "五月天" },
    { "id": 2, "name": "当", "singer": "动力火车" },
    { "id": 3, "name": "不能说的秘密", "singer": "周杰伦" }
  ]
}
  1. 以 JSON 文件所在文件夹作为工作目录 ,执行如下命令
json-server --watch db.json
  1. 访问 localhost:3000/song

在这里插入图片描述

若想访问id为1的:localhost:3000/song/1

1.4、接口测试工具

1.4.1、apipost

  • 官网:Apipost-API 文档、设计、调试、自动化测试一体化协作平台

和Postman使用类似,只是 apipost 是中文免费的。

1.4.2、apifox

1.4.3、postman

2、会话

所谓会话控制就是对会话进行控制,HTTP 是一种无状态的协议,它没有办法区分多次的请求是否来自于同一个客户端, 无法区分用户。而产品中又大量存在的这样的需求,所以我们需要通过 会话控制 来解决该问题。

常见的会话控制技术有三种:

  • cookie
  • session
  • token

2.1、cookie

cookie 是 HTTP 服务器发送到用户浏览器并保存在本地的一小块数据

  • cookie 是保存在浏览器端的一小块数据
  • cookie 是按照域名划分保存的

2.1.1、特点

浏览器向服务器发送请求时,会自动将 当前域名下 可用的 cookie 设置在请求头中,然后传递给服务器

  • 这个请求头的名字也叫 cookie ,所以将 cookie 理解为一个 HTTP 的请求头也是可以的

2.1.2、cookie的运行流程

填写账号和密码校验身份,校验通过后下发 cookie:

在这里插入图片描述

有了 cookie 之后,后续向服务器发送请求时,就会自动携带 cookie

在这里插入图片描述

不同浏览器中的 cookie 是相互独立的,不共享

2.1.3、cookie的代码操作

express 中可以使用 cookie-parser 进行处理

  1. 下载cookie-parser
npm i cookie-parser
  1. 引入 cookie-parser
const cookieParser = require('cookie-parser');
  1. 设置cookie
//设置cookie
app.get('/set-cookie', (req, res) => {
  //不带时效性:关闭浏览器cookie就失效
  res.cookie('username','linxiao');
  //带时效性,单位是毫秒, 60×1000 是一分钟
  res.cookie('email','2487422771@qq.com',{maxAge:5*60*1000});
  //响应
  res.send('Cookie的设置');
});
  1. 读取cookie
// 读取cookie
app.get('/get-cookie',(req,res) => {
  //读取cookie
  console.log(req.cookies);
  res.send('Cookie的读取');
})
  1. 删除cookie
// 删除cookie
app.get('/delete-cookie',(req,res) => {
  //删除
  res.clearCookie('username');
  res.send('Cookie的清除');
})

在这里插入图片描述

2.2、session

  • session 是保存在 服务器端的一块儿数据 ,保存当前访问用户的相关信息。
  • 作用:实现会话控制,可以识别用户的身份,快速获取当前用户的相关信息

2.2.1、session的运行流程

填写账号和密码校验身份,校验通过后创建 session 信息 ,然后将 session_id 的值通过响应头返回给浏览器

在这里插入图片描述

有了 cookie,下次发送请求时会自动携带 cookie,服务器通过 cookie 中的 session_id 的值确定用户的身份

在这里插入图片描述

2.2.2、session的代码操作

express 中可以使用 express-session 对 session 进行操作

  1. 下载 express-session 、 connect-mongo
npm i express-session connect-mongo
  1. 引入 express-session 、 connect-mongo
    • express-session 是把数据存在了内存里面,不利于演示,所以下载了 connect-mongo
const session = require("express-session");
const MongoStore = require('connect-mongo');
  1. 设置session的中间件
// 设置session的中间件
app.use(session({
  name: 'sid', // 设置响应cookie的name,默认值是: connect.sid
  secret: 'Augenestern', // 设置加密字符串,加盐,又称签名
  saveUninitialized: false, // 是否为每次请求都设置一个 cookie 用来存储 session 的id
  resave: true, // 是否在每次请求时重新保存session
  store: MongoStore.create({
    mongoUrl: 'mongodb://127.0.0.1:27017/bilibili' //数据库的连接配置
  }),
  cookie: {
    httpOnly: true,// 开启后前端无法通过 JS 操作cookie,例如document.cookie
    maxAge: 1000*300, // 是控制 sessionID 的过期时间的,300s
  }
}));
  1. 创建session
// 创建session
app.get('/login',(req,res) => {
  //设置session
  req.session.username = 'zhangsan';
  req.session.email = 'zhangsan@qq.com';
  res.send('登录成功');
});
  1. 销毁session
// 销毁session
app.get('/logout',(req,res) => {
  req.session.destroy(() => {
    res.send('成功退出');
  });
})

2.2、cookie和session的区别

cookie 和 session 的区别主要有如下几点:

  1. 存在的位置
    • cookie:浏览器端
    • session:服务器端
  2. 安全性
    • cookie 是以明文的方式存放在浏览器端的,安全性低
    • session存放于服务器端,安全性相对较好
  3. 网络传输量
    • cookie 设置内容过多会增大报文体积, 会影响传输效率
    • session 数据存储在服务器,只是通过 cookie 传递 id,所以不影响传输效率
  4. 存储限制
    • 浏览器限制单个 cookie 保存的数据不能超过 4K ,且单个域名下的存储数量也有限制
    • session 数据存储在服务器中,所以没有这些限制

2.3、token

  • token服务端生成并返回给 HTTP 客户端的一串加密字符串, token 中保存着 用户信息
  • 作用:实现会话控制,可以识别用户的身份,主要用于移动端 APP

2.3.1、token的运行流程

填写账号和密码校验身份,校验通过后响应 token,token 一般是在响应体中返回给客户端的

在这里插入图片描述

后续发送请求时,需要手动将 token 添加在请求报文中,一般是放在请求头中

在这里插入图片描述

2.3.2、token的特点

  • 服务端压力更小
    • 数据存储在浏览器端
  • 相对更安全
    • 数据加密
    • 可以避免CSRF跨站请求伪造
  • 扩展性更强
    • 服务间可以共享
    • 增加服务节点更简单

2.3.3、JWT

JWT(JSON Web Token)是目前最流行的跨域认证解决方案,可用于基于 token 的身份验证

  • JWT 使 token 的生成与校验更规范
  • 我们可以使用 jsonwebtoken 包 来操作 token

  1. 下载jsonwebtoken
npm i jsonwebtoken
  1. 导入
//导入 jsonwebtokan
const jwt = require('jsonwebtoken');
  1. 创建token
//创建 token
// jwt.sign(数据, 加密字符串, 配置对象)
let token = jwt.sign({
  username: 'zhangsan'
},'Augenetsern',{
  expiresIn: 60 // 单位是秒
});

console.log(token);
  1. 解析token
// 解析token
jwt.verify(token,'Augenestern',(err,data) => {
  if (err){
    console.log('校验失败');
    return;
  }
  console.log(data);
})

扩展阅读:JSON Web Token 入门教程 - 阮一峰的网络日志 (ruanyifeng.com)

3、本地域名

所谓本地域名就是 只能在本机使用的域名 ,一般在开发阶段使用

3.1、操作流程

  1. 编辑文件 C:\Windows\System32\drivers\etc\hosts ,添加如下代码
127.0.0.1 www.baidu.com

如果修改失败, 可以修改该文件的权限

在这里插入图片描述

3.2、原理

在地址栏输入域名之后,浏览器会先进行 DNS(Domain Name System) 查询,获取该域名对应的 IP 地址

  • 请求会发送到 DNS 服务器,可以 根据域名返回 IP 地址

  • 可以通过 ipconfig /all 查看本机的 DNS 服务器

  • hosts 文件也可以设置域名与 IP 的映射关系,在发送请求前,可以通过该文件获取域名的 IP 地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1079497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电容笔什么牌子好?比较好用的ipad手写笔推荐

哪一种电容笔适合学生党?作为一名数字爱好者,我对电容笔还是有所了解的。其实苹果的电容笔,与一般的电容笔最大的不同之处,就是在于压感方面上。因为苹果的电容笔具有独一无二的“重力压感”,所以我们可以在绘图时使用…

Allegro单独更改覆铜焊盘的连接方式

用Allegro进行PCB设计过程中,对于通孔焊盘,为了后续好维修,考虑到散热因素,默认使用的都是花焊盘的连接方式。 但是个别为了过大电流的通孔焊盘,为了增加载流,需要单独设置为全连接的方式。具体设置的方法如下: (1)点击菜单Shape 选择Select Shape or Void/Cavity(选…

力扣(LeetCode)2731. 移动机器人(C++)

脑经急转弯排序 碰撞只改变运动方向,速度始终如"1",且机器人视为无差别的,所以碰撞等于擦肩而过!"机器人碰撞,到底撞没撞,如撞。"因此只考虑每个机器人单方向移动,d秒后停…

asp.net网上销售系统VS开发mysql数据库web结构c#编程Microsoft Visual Studio计算机毕业设计

一、源码特点 asp.net 网上销售系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为mysql,使用c#语言开发 aspnet 网上销售系统1 二、功能介绍 前台功能…

【【萌新的SOC学习之GPIO学习 水】】

萌新的SOC学习之GPIO学习 General Purpose I/O 通用I/O zynq-7000 SOC PS 分为四大部分 APU application Processor UintMemoryIO外设Interconnect 内部互联 PL : IO外设 GPIO可以连接通用的设备(比如按键) 也可以用GPIO模拟其他的协议 GP…

电容笔有必要买吗?电容笔牌子排行

随着越来越多用户都开始用上了电容笔,苹果的Pencil,尽管功能强大,但是价格昂贵,并非所有人都可以有预算买得起。现在市面上有许多平替电容笔,其成本低、操作简便,因而受到了广泛的关注。所以,我…

Typora for Mac:优雅的Markdown文本编辑器,提升你的写作体验

Typora是一款强大的Markdown文本编辑器,专为Mac用户设计。无论你是写作爱好者,还是专业作家或博客作者,Typora都能为你提供无与伦比的写作体验。 1. 直观的界面设计 Typora的界面简洁明了,让你专注于写作,而不是被复…

绘制X-Bar-S图和X-Bar-R图,监测过程的稳定性和一致性

X-Bar-S图和X-Bar-R图是统计质量控制中常用的两种控制图,用于监测过程的稳定性和一致性。它们的主要区别在于如何计算和呈现数据的变化以及所关注的问题类型。 X-Bar-S图(平均值与标准偏差图): X-Bar代表样本均值,S代表…

人机环系统智能中,事实和价值并不是独立的

一般情形下,人们尤其是西方常常把事实与价值区分开来,因此出现了研究事实的科学技术。事实是指客观存在、可以被验证或证明的情况或事件。它们与现实世界中的真实情况相对应,可以通过观察、实验或逻辑推理等方式来确定。而价值是指对事物的评…

【史上最简单】idea 打开 eclipse 项目

相比打开 idea 后选择eclipse 项目再.......一系列操作相比,这是一最简单的方法。 只需要删除eclipes创建的工作索引,保留src文件即可。 删除以上三个文件夹后,再用 idea 打开项目即可。 如果本篇文章对你有帮助,还请一键三连【开…

Netty深入浅出Java网络编程学习笔记(一) Netty入门篇

目录 一、概述 1、什么是Netty 2、Netty的优势 二、入门案例 1、服务器端代码 2、客户端代码 3、运行流程 组件解释 三、组件 1、EventLoop 处理普通与定时任务 关闭 EventLoopGroup 处理IO任务 服务器代码 客户端代码 分工细化 划分Boss 和Work 增加自定义EventLoopGroup 切换…

练[HarekazeCTF2019]encode_and_encode

[HarekazeCTF2019]encode_and_encode 文章目录 [HarekazeCTF2019]encode_and_encode掌握知识解题思路代码分析 关键paylaod 掌握知识 ​ JSON对Unicode字符的解析转义,json格式的构建,代码审计,php伪协议的利用,file_get_content…

Python 中的 set 集合类型是可迭代的吗?

当我们运行以下代码时会报错。 a {1, 2, 4, 3, 4} for i in range(len(a)):print(a[i]) 所以我之前一直以为 set 类型是不可迭代的,后来发现这里的报错问题是:set object is not subscriptable,也就是说 set 是不可以通过下标来访问的。因为…

APP如何设计应用的屏幕截图以提高下载量

APP高质量的应用程序商店屏幕截图,对于建立初始信任以及向潜在用户推销应用程序的优势至关重要。创建应用程序商店屏幕截图,以最好的方式展示我们的应用程序,从而优化应用形象。 1、使用大标题。 确保重点突出品牌的独特性,在屏幕…

改进智能优化算法常用指标一键导出为EXCEL,最优值,平均值,标准差,最差值,中位数,秩和检验,箱线图...

声明:对于作者的原创代码,禁止转售倒卖,违者必究! 为了突出改进智能优化算法的效果,常常会将改进的智能算法与其他算法进行对比。 在一些期刊论文中,经常会看到一个超级大的表格,统计着每个算法…

基于地理位置的IP地址定位技术

IP地址定位是指通过互联网上的IP地址,准确地定位出该IP地址对应的物理位置。IP地址是互联网上设备之间通信时使用的一个地址标识符,每个设备都有一个唯一的IP地址。 IP地址定位的原理是通过收集和分析网络设备的IP地址和相应的网络数据,以确定…

3D目标检测实战 | 详解2D/3D检测框交并比IoU计算(附Python实现)

目录 1 交并比基本概念2 2D检测框IoU计算3 旋转2D检测框IoU计算4 3D检测框IoU计算 1 交并比基本概念 交并比(Intersection Over Union, IoU)是度量两个目标检测框交叠程度的方式,公式如下 I o U a r e a ( B p ∩ B g t ) a r e a ( B p ∪ B g t ) \mathrm{IoU}\…

【VTK】一文讲解vtkImageActor

很高兴在雪易的CSDN见到你,给你糖糖 系列文章目录 VTK付费专栏_雪易的博客-CSDN博客 感谢订阅的小哥哥小姐姐,小易会继续努力分享,一起进步! 若订阅后有其它需求,欢迎随时联系,CSDN一直在线(^U^)ノ~YO 前言 本文主要讲解vtk的

SD卡格式化如何恢复数据?

SD卡作为现代移动设备如手机、数码相机以及行车记录仪中的重要存储组件,其应用场景越来越广泛。与硬盘或U盘一样,SD卡也不是完全免疫于数据丢失的问题,特别是在误格式化或误删除的情况下。所以,许多人会有这样的疑问:S…

【21】c++设计模式——>装饰模式

装饰模式的定义 装饰模式也可以称为封装模式,所谓的封装就是在原有行为之上进行扩展,并不会改变该行为; 例如网络通信: 在进行网络通信的时候,数据是基于IOS七层或四层网络模型(某些层合并之后就是四层模型…