node模块推荐-(分享几个有趣的npm包:两个字体banner模块和一个人脸识别模块)
figlet模块
官方文档
基本介绍:
figlet.js是一个能够帮助我们生成一个属于我们自己的banner这样的一个js库, 我们可以将其生成的banner应用到我们自己的项目中,这样就可以为我们的项目增加一些个人的印记了(一般是在项目运行的时候在控制台中输出banner),就好像下面一样:
基本使用:
安装包(node.js)
npm install figlet
使用语法:
figlet.text( parms,{options},function (err,data){})// parms:需要格式化的字符串// options:参数配置// funtion(err,data):回调函数
参数介绍(options)
Font : 字体(String)
horizontalLayout : 布局(String)
verticalLayout : 垂直布局(String)
Width : 宽度(Number)
whitespaceBreak : 换行(Boolean)
代码实例:
console.log( ...
nodejs学习笔记(22)-multer文件上传
multer中间件的使用
官方文档
为什么需要multer中间件?
我们在做文件上传的时候经常在前端使用到form表单来提交数据,上传文件不比上传数据(字符串或数值,数组),文件一般是比较大的,以此,不能采取x-www-form-urlencoded将数据拼接到URL(GET请求)或者请求体(POST)请求,因为后端是无法处理文件的,它自能处理json或x-www-form-urlencoded格式的数据,这是一种规定,因此,要想上传文件到后端,就必须使用enctype="multipart/form-data"属性下的form表单,由此引出能够让后端处理multipart类型数据的中间件 - multer
什么是multer
Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件。它是写在 busboy 之上非常高效。
注意: Multer 不会处理任何非 multipart/form-data 类型的表单数据。基本使用:安装multernpm install --save mult ...
nodejs学习笔记(21)-websocket学习(5)-使用socket.io模块来重构上一个demo
多人在线聊天系统(io模块实现)实现需求:登录鉴权(jwt模块)
实现登陆界面的跳转到聊天页面的同时保存通过jwt模块生成的token保存到本地浏览器中(localStorage),当我们通过更改浏览器的url再次访问聊天界面的时候能够顺利进入
当我们删除浏览器本地存储(localStorage)的token时,此时在次通过修改浏览器url的方式进入是失败的,需要重新登陆生成新的token
数据库操作用户(mysql2模块)
通过数据库中存储的数据来进行用户身份的第一层识别以及token的生成
群聊模式(io模块)
在聊天页面上能够实现群聊与私聊的区分,群聊即所有在线的用户都能看到,私聊则只有接收方才能看到,其他人是看不到的
私聊模式(io模块)
在聊天页面上能够实现群聊与私聊的区分,群聊即所有在线的用户都能看到,私聊则只有接收方才能看到,其他人是看不到的
用到的技术栈
node.js
express框架(快速搭建服务器)
axios(使用到里面的请求拦截器和响应拦截器以及ajax请求发送)
请求拦截器:用于登录鉴权,当我们进入聊天界面的时候,首先会通过请求拦截器来将本地的to ...
nodejs学习笔记(20)-socket学习(4) - socket.io模块
socket.io模块
官方文档(英文)
使用文档(中文)
Socket.IO与ws相似,但是却比ws开发效率更高的一个WebSocket 模块,socket.io包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用,有以下特点:
易用性:socket.io封装了服务端和客户端,使用起来非常简单方便。
跨平台:socket.io支持跨平台,这就意味着你有了更多的选择,可以在自己喜欢的平台下开发实时应用。
自适应:它会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,非常方便和人性化,而且支持的浏览器最低达IE5.5
支持自定义监听事件: 我们之前在ws模块中,只能通过ws.on('message',function)的方式来监听里面的switch分支来实现群聊和私聊功能等,但是使用socket.io就能实现自定义监听,如前端:io.on('群聊',function),服务端:emit('群聊')就能实现监听一个群聊消息
自 ...
nodejs学习笔记(19)-websocket学习(3)-结合ws模块结合jwt模块和数据库做的一个小demo
多人在线聊天系统实现需求:登录鉴权(jwt模块)
实现登陆界面的跳转到聊天页面的同时保存通过jwt模块生成的token保存到本地浏览器中(localStorage),当我们通过更改浏览器的url再次访问聊天界面的时候能够顺利进入
当我们删除浏览器本地存储(localStorage)的token时,此时在次通过修改浏览器url的方式进入是失败的,需要重新登陆生成新的token
数据库操作用户(mysql2模块)
通过数据库中存储的数据来进行用户身份的第一层识别以及token的生成
群聊模式(ws模块)
在聊天页面上能够实现群聊与私聊的区分,群聊即所有在线的用户都能看到,私聊则只有接收方才能看到,其他人是看不到的
私聊模式(ws模块)
在聊天页面上能够实现群聊与私聊的区分,群聊即所有在线的用户都能看到,私聊则只有接收方才能看到,其他人是看不到的
用到的技术栈
node.js
express框架(快速搭建服务器)
axios(使用到里面的请求拦截器和响应拦截器以及ajax请求发送)
请求拦截器:用于登录鉴权,当我们进入聊天界面的时候,首先会通过请求拦截器来将本地的token与登录po ...
nodejs学习笔记(18)-websocket学习(2)-ws模块的基本使用(1)
ws模块
官方文档
构建流程客户端(前端)
通过new浏览器的内置对象WebSocket来构建一个WebSocket连接器,并指定要连接的端口号
// 创建websocket连接器并指定链接端口(固定形式)var ws = new WebSocket("ws://localhost:8080")
生成的ws实例一般提供6个回调函数:
onclose: 服务器宕机就走这个回调函数
onerror: 连接失败就走这个回调函数
onmessage: 服务端每一次推送消息过来就走这个回调函数
onopen: 客户端与服务器连接成功就会走这个回调函数
send: 客户端向服务器发送消息
close: 关闭连接
// ws模块提供的5个回调函数// 1. onclose(服务器宕机)ws.onclose = () =>{ console.log('服务器宕机了!');}// 2. onerror(客户端与服务器连接失败)ws.onerror = ()=>{ console.log(' ...
nodejs学习笔记(17)-websocket学习(1)-初识websocket
什么是websocket
WebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议)
它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的
Websocket是一个持久化的协议
应用场景:
实时弹幕
媒体聊天
协同编辑(如world文档)
基于位置的实时更新应用(美团外卖)
体育实况的更新
股票基金报价的实时更新等…
http协议和websocket协议的区别在哪呢?
http协议
要知道http协议的模式的运行流程是: http协议是单向通信的,即客户端先向服务器发送请求,服务器再给客户端响应数据, 服务器永远不可能低下头主动的给服务器响应数据的, 除非客户端先向服务器要数据, 也就是说,浏览器不主动请求的话,服务器是永远不可能给你发数据的,这就是http协议,那使用http协议来实现上面的应用场景的话其实也是可以实现的,不过实现起来比较麻烦, 常用的实现方法有轮询。
所谓的轮询,其实就是再客户端(js端)设置一个定时器,按照一定的时间间隔向服务器发送请求, 来询问服务器是否有最新的数据(弹幕,聊天信息,位置等 ...
nodejs学习笔记(16)-jwt登录鉴权(2)-在express中使用jwt
在express框架中使用JWT
安装JWT相关的包:
jsonwebtoken: 用于生成 JWT 字符串
express-jwt 用于将 JWT 字符串解析还原成 JSON 对象
npm i jsonwebtoken express-jwt
导入JWT相关包
const express = require('express')//express框架const jwt = require('jsonwebtoken')//jwt生成器const expressJWT = require('express-jwt')//jwt解析器// const { expressJWT:expressJWT } = require("express-jwt")//高版本使用 jwt解析器
设置密钥和使用jwt.sign()加密你想加密的信息生成jwt字符串
为了保证 JWT 字符串的安全性,防止 JWT 字符串在网络传输过程中被别人破解,我们需要专门定义一个用于加密和解密的 secr ...
nodejs学习笔记(15)-jwt登录鉴权(1)
为什么需要JWT?
我们之前学到的Session认证机制需要配合Cookie才能实现,且由于Cookie是不支持跨域访问的, 因此,当涉及到前端跨域请求后端接口的时候,需要做很多额外的配置,才能实现跨域 Session 认证。
注意
当前端请求后端接口不存在跨域问题的时候,推荐使用 Session 身份认证机制。
当前端需要跨域请求后端接口的时候,不推荐使用 Session 身份认证机制,推荐使用 JWT 认证机制。
什么是JWT?
JWT(英文全称:JSON Web Token)是目前最流行的跨域认证解决方案。
它遵循JSON格式(因此不存在跨域问题),将用户信息加密到token里,服务器不保存任何用户信息,只保存密钥信息,通过使用特定加密算法验证token,通过token验证用户身份。基于token的身份验证可以替代传统的cookie+session身份验证方法。
JWT的工作原理:
总结
用户登录提交信息到服务器 , 服务器将用户提交的信息通过特定的密钥加密成一个token字符串, 随后相应给客户端, 客户端再将响应回来的token字符串主动的保存到浏览器当中(local ...
nodejs学习笔记(14)-Cookie与Session身份验证(2) - 在node中session中间件的使用
Session中间件的使用
安装express-session中间件
npm install express-session --save
随后在项目当中引入中间件
const session = require("express-session")
注册和配置session中间件
app.use(session({ secret: 'server-session', // 服务器生成session的签名 自定义 name: 'sessionToCookieName', // 设置session对应cookie的名称 resave: false, // 强制保存session,即使他没有变化,必须配置,否则会有警告 saveUninitialized: true, // 强制将未初始化的session存储,必须配置,否则会有警告 rolling: true, // 在每次请求时强行设置cookie,这将重 ...