fs 模块
---- fs.readFile(‘路径’,‘格式’,callback(err,dataStr)) 读取文件
---- fs.writeFile('路径',‘要写入的数据’,‘格式(可选填),callback(err)’) 写入文件
path 模块
__dirname 被执行 js 文件的绝对路径
---- path.join(__dirname,'/a/b/c') 拼接路径
---- path.basename('路径',‘文件后缀名’) 可获取最后一段文件名+文件后缀名,如果填入‘文件后缀名’,则只返回文件名
---- path.extname(‘路径’) 获取文件后缀名
http 模块
const server = http.createServer( (req, res) => {} ) 创建服务
server.listen('端口号',() => {} ) 监听访问
npm
npm i 包名称 -D ( -D 是 --save-dev 的缩写, 包只在开发环境使用)
npm i 包名称 -g ( -g 全局包 )
Express
Express 是基于 node 内置 http 模块封装的。
最常见的可以做
Web 网站服务器,专门对外提供网站资源的服务器
API 接口服务器, 专门对外提供 API 接口的服务器
使用Express , 可以更高效快速的创建 web服务器 或者 API 服务器
const express = require('express')
const app = express() // 创建服务器 app
app.use(express.static('资源路径文件夹')) // 将要向外提供的静态资源文件夹目录写入
app.listen(80) // 监听服务器运行在80端口
app.get('请求路径',(req,res)=>{})
app.post('请求路径',(req,res)=>{})
挂载路径前缀
app.use('/public',express.static('public')) // 之后访问资源需要添加上 /public 路径
Express 中间件
1.一定要在 路由之前 注册中间件
2.客户端发送请求过来,可以 连续添加调用 多个中间件 进行处理
3.执行完中间件的代码之后,不能忘记 next()
4.为了 防止代码逻辑混乱 , 在 next() 之后不要添加额外代码
5.连续调用多个中间件时, 多个中间件之间, 共享 req 和 res 对象
错误级别中间件放在所以路由之后
Express内置中间件
express.static() ---------- 无兼容限制
express.json() -------------- 4.16.0 +
express.urlencoded({ extended: false }) 解析URL-encoded 格式的请求体数据 ---------- 4.16.0 +
querystring
const qs = require( ' querystring ' )
qs.parse() 解析查询字符串为对象格式
解决跨域
cors(跨域资源共享,由一系列http响应头组成,这些HTTP响应头决定浏览器是否阻止前端JS代码跨域获取资源)
cors是 Express 的一个第三方中间件,通过安装和配置cors中间件,可以很方便的解决跨域问题。
app.use(cors())(一定要在路由配置之前配置cors!!!!!!)
JSONP
JSONP通过
JSONP不属于真正的Ajax请求,因为它没有使用 XMLHttpRequest 这个对象
JSONP只支持get请求
数据库
数据库是用来 组织,存储和管理数据的仓库。
数据库 MySQL --- Oracle(收费) --- SQL Server(收费) --- Mongodb
web 开发模式
1.服务端渲染
优点:
1.前端耗时少,服务端负责生成html内容,浏览器只负责渲染,尤其是移动端,更省电。
2.利于seo优化,因为从服务端响应的是完整的html内容,所以利于爬虫获取信息,更利于SEO
缺点
1.占用服务端资源
2.不利于前后端分离,开发效率低
2.前后端分离
身份认证
session 认证机制
JWT认证机制 (JSON WEB TOKEN )
目前最流行的跨域认证解决方案
JWT 通常用三部分组成 Header 头部, Payload有效荷载, Signatute 签名, 三者之间用 . 分隔。
token生成 token解析
npm i jsonwebtoken express-jwt
jsonwebtoken 生成 token
express-jwt 解析 token
const secretStr = 'jwt01' // 加密串
生成token: jsonwebtoken.sign({key:value},加密串,expire是In:‘过期时间’)
解析token:app.use(expressJWT({ secret: secretStr, algorithms: ['HS256'] }).unless({ : [/^/register/] }))
bcryptjs 加密
无法逆向破解
同一明文密码多次加密,得到加密结果各不相同
bcrypt.hashSync(加密数据,随机盐的长度)
表单验证
@hapi/joi 为表单中定义每个数据项,定义验证规则
npm i @hapi/joi
@escook/express-joi ,Express 中间件,来实现自动对表单的验证功能。
npm i @escook/express-joi
导入@hapi/joi