nodejs学习笔记(13)-Cookie与Session身份验证(1)-了解Cookie和Session
身份认证什么是身份认证?
身份认证(Authentication)又称“身份验证”、“鉴权”,是指通过一定的手段,完成对用户身份的确认。
日常生活中的身份认证随处可见,例如:高铁的验票乘车,手机的密码或指纹解锁,支付宝或微信的支付密码等。
在 Web 开发中,也涉及到用户身份的认证,例如:各大网站的手机验证码登录、邮箱密码登录、二维码登录等。
为什么需要身份验证?
身份认证的目的,是为了确认当前所声称为某种身份的用户,确实是所声称的用户。例如,你去找快递员取快递,你要怎么证明这份快递是你的。
在互联网项目开发中,如何对用户的身份进行认证,是一个值得深入探讨的问题。例如,如何才能保证网站不会错误的将“马云的存款数额”显示到“马化腾的账户”上。
不同开发模式下的身份认证
对于服务端渲染和前后端分离这两种开发模式来说,分别有着不同的身份认证方案:
服务端渲染推荐使用 Session 认证机制
前后端分离推荐使用 JWT 认证机制(重点学习)
http协议的基本介绍http协议的无状态性
了解 HTTP 协议的无状态性是进一步学习 Session 认证机制的必要前提。
HTTP 协议 ...
nodejs学习笔记(12)-Mysql数据库快速入门(2)-node操作数据库
node操作数据库
初始化npm
npm init
安装mysql2模块以及express框架
npm i --save express mysql
后面就是项目中的代码应用:(基本使用)
//引入express模块和mysql2模块const express = require('express')const mysql = require('mysql2')// 创建服务器const app = express()app.get('/',async (req , res)=>{ // 1.创建连接池,进行操作 const config = getConfig()//2.创建数据库连接对象 // 3.创建数据库连接池(promise形式调数据) const promisePool = mysql.createPool(config).promise() // 4.使用query方法来操作数据库(里面填的是sql操作语句) // var students ...
nodejs学习笔记(11)-Mysql数据库快速入门(1)
MySQL数据库的快速入门
因为要学习nodejs所以这里简单的入门学习一下数据库,而为什么选择MySQL呢? 因为它是目前网上最火的数据库,同时页是免费开源的
这里我并没有选择安装MySQL server,而是选择了使用wamp集成环境来开发,因为它相对于前者,里面已经集成了图形化处理,不再需要另外安装数据库图形化处理软件
创建数据库
SQL的基本语法
插入数据
INSERT INTO `students`(`name`, `score`, `gender`) VALUES ('lam',100,1)-- 可以不设置id,create_time-- 这里省略了id的设置,因为id为我设置成了自增
更新数据
UPDATE `students` SET `name`='张三',`score`=20 WHERE id=2;//将students表格中id为2的行里面的name设置为张三,score设置为20
删除数据
DELETE FROM `students` WHERE id=2;-- 删除id为2的数据行
查询数据
-- ...
模板引擎pug-pug 模板语法的学习
pug 模板语法的学习
官方文档
pug 原名 jade ,因版权问题更名为 pug ,即哈巴狗。 ejs 一样,pug 也是一个模板引擎,可用于快速的网站开发,当然也可以用于静态博客网站的设计。
安装npm install pug
语法
pug 不同于 html ,前者不需要标签的开和闭,如 html 的 <p>Demo</p> ,在 pug 使用 p Demo 即可。
缩进
pug 对空格敏感,有点类似 python 对制表符tab敏感。pug 使用空格作为缩进符,当然用 soft tab 也可行。同一级标签需保证左对齐。
div p Hello, world! p Hello, pug.
渲染结果如下:
<div> <p>Hellow, world!</p> <p>Hello, pug.</p></div>
注释
pug 使用 //- 或 // 对代码进行注释,前者注释内容不出现在渲染后的 html 文件中,后者反之。
//- html中不包含 ...
nodejs学习笔记(10)-express框架学习(4)-pug模板引擎的基本使用以及express生成器
express模板引擎(服务端渲染)为什么需要模板引擎?
我们都知道,使用express框架能够很快的搭建一个服务器,服务器能够向,前端返回接口数据,渲染页面亦或者返回一段html的代码片段,但是我们要将代码片段写在res.send('这里面'),就显得非常的麻烦和复杂,并且我们在加载静态资源的时候,通过请求url来发送请求,而url后面就需要携带.html为后缀,这就非常的不好看,因此就衍生了模板引擎!
使用模板引擎过后,在程序运行时,模板引擎使用实际的值替换模板文件中的变量,并将模板转换为要发送给客户端的HTML文件。这种方法使得设计HTML页面变得更加容易,轻松实现数据与视图分离,有利于大型项目中的前后端开发的分工协作。
安装pug模板引擎npm install pug --save
项目目录:├── dist| └── js| └── js.js├── app.js└── view ├── home.pug └── style.css
重点设置:// 引入pug模板app.set('views', path.join(__d ...
nodejs学习笔记(9)-express框架学习(3)-获取get和post请求的参数和托管静态资源
使用express框架获取get和post请求的参数代码展示:
获取get和post的请求参数.js
// express框架 - 获取get和post的请求参数// 引入express框架const express = require('express')// 创建app服务器const app = express()// 配置解析post参数的两个内置中间件// 通过express.json()这个中间件,解析表单中的JSON格式的数据app.use(express.json())//解析post的请求题参数(json格式)// 通过express.urlencoded()这个中间件,来解析表单中的url-encoded格式的数据app.use(express.urlencoded({extended:false}))//解析post的请求题参数(encoded格式)// 1.发送请求get请求获取请求参数app.get('/login',(req,res)=>{ // 现在我们可以直接使用expr ...
nodejs学习笔记(8)-express框架学习(2)-express中间件
express中间件
Express 是一个自身功能极简,完全是由路由和中间件构成一个的 web 开发框架:从本质上来说,一个 Express 应用就是在调用各种中间件。
中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next 的变量。
中间件的功能包括:
执行任何代码。
修改请求和响应对象。
终结请求-响应循环。
调用堆栈中的下一个中间件。
如果当前中间件没有终结请求-响应循环,则必须调用 next() 方法将控制权交给下一个中间件,否则请求就会挂起。
Express 应用可使用如下几种中间件:
应用级中间件
路由级中间件
错误处理中间件
内置中间件
第三方中间件
使用可选则挂载路径,可在应用级别或路由级别装载中间件。另外,你还可以同时装在一系列中间件函数,从而在一个挂载点上创建一个子中间件栈。
1.应用级中间件
应用级中间件绑定到 app 对象 使用 app.use() 和 ...
nodejs学习笔记(7)-express框架学习(1)-创建基本服务器以及基本路由
express框架
官方文档
Express是目前流行的基于Node.js运行环境的Web应用程序开发框架,它简洁且灵活,为Web应用程序提供了强大的功能。Express提供了一个轻量级模块,类似于jQuery(封装的工具库),它把Node.js的HTTP模块的功能封装在一个简单易用的接口中,用于扩展HTTP模块的功能,能够轻松地处理服务器的路由、响应、Cookie和HTTP请求的状态。
Express的优势:
简洁的路由定义方式。
简化HTTP请求参数的处理。
提供中间件机制控制HTTP请求。
拥有大量第三方中间件。
支持多种模版引擎。
安装express框架// 项目初始化npm init -y// 安装npm install express --save
创建最基本的服务器
index.js
// express框架 - 创建最简单的服务器// 1.引入express框架const express = require('express')// 2.创建app服务器const app = express()// 3.发送请求app.get( ...
nodejs学习笔记(6)-配置路由(原生理论)
nodejs配置路由
这篇博客就使用原生的node来配置路由,涉及路由的基本跳转, 获取请求参数,页面路由和api接口路由的合并封装,直接上代码了
代码展示:
页面路由(route.js)
// 设置路由转向// 引入fs模块const fs =require("fs")// 渲染函数renderfunction render(res,path,type=""){//第三个参数为文件读取格式 // 设置响应头(文件和文字的读取格式) res.writeHead(200, { "Content-Type": `${type?type:"text/html"};charset=utf8` }) res.write(fs.readFileSync(path), "utf-8") res.end()}// 方法1 : 将路由的转向设置成一个函数// function route(res , url){ ...
nodejs学习笔记(5)-内置模块(4)-stream模块,zlib模块和path模块
stream模块
官方文档
stream是Node.js中fs模块提供的又一个仅在服务区端可用的子模块,目的是支持“流”这种数据结构。
什么是流?流是一种抽象的数据结构。想象水流,当在水管中流动时,就可以从某个地方(例如自来水厂)源源不断地到达另一个地方(比如你家的洗手池)。我们也可以把数据看成是数据流,比如你敲键盘的时候,就可以把每个字符依次连起来,看成字符流。这个流是从键盘输入到应用程序,实际上它还对应着一个名字:标准输入流(stdin)。
数据流就是数据不是一次性全部返回或者一次性全部读取的,他是通过先读取(或者写入)一部分,再读取(或者写入)一部分,知道最后完成数据的全部操作的,因此stream模块更加适用于大型数据的读取或者写入操作
如果应用程序把字符一个一个输出到显示器上,这也可以看成是一个流,这个流也有名字:标准输出流(stdout)。流的特点是数据是有序的,而且必须依次读取,或者依次写入,不能像Array那样随机定位。
有些流用来读取数据,比如从文件读取数据时,可以打开一个文件流,然后从文件流中不断地读取数据。有些流用来写入数据,比如向文件写入数据时,只需要把 ...