使用express写接口
const express=require('express')
const router=express.Router()
router.get('/get',(req,res)=>{
//通过req.query获取客户端通过查询字符串,发送到服务器的数据
const query=req.query
res.send({
stasus:0, //0表示成功,1表示失败
msg:'get请求成功',
//需要响应给客户端的数据
data:query
})
})
//定义post请求
router.post('/post',(req,res)=>{
//通过req.body获取请求体中url-encoded格式的数据
req.body=body
res.send({
status:0,
msg:'post请求成功'
data:body
})
})
使用CORS解决跨域问题
cors是express的一个第三方中间件,通过安装和配置cors中间件,可以很方便地解决跨域问题.
使用步骤分为如下3步:
- 运行npm install cors安装中间件;
- 使用const cors=require(‘cors’)导入中间件;
- 在路由之前调用app.use(cors())配置中间件
CORS
CORS(Cross-origin Resource Sharing,跨域资源共享)由一系列HTTP响应头组成,这些HTTP响应头决定浏览器是否阻止前端JS代码跨域获取资源.
浏览器的同源安全策略默认会阻止网页’‘跨域’获取资源’',但如果接口服务器配置了CORS相关的HTTP响应头,就可以解除浏览器端的跨域访问限制.
CORS跨域资源共享的注意事项 - CORS只要是在服务器端进行配置,客户端浏览器无需做任何额外的配置,即可请求开启了cors的接口.
- cors在浏览器中有兼容性,只有支持XMLHttpRequest Level2的浏览器,才能正常访问开启了CORS的服务器端接口(例如:IE10+,Chrome4+,FireFox3.5+).
cors响应头部 Access-Control-Allow-Origin
默认情况下,cors仅支持客户端发起GET,POST,HEAD请求
CORS请求分类
cors请求分为两大类,分别是简单请求和预检请求。
简单请求:
(1)请求方式:GET,POST,HEAD三者之一;
(2)HTTP请求头部信息不超过以下几种字段:无定义头部字段,Accept,Accept-Language,Content-Language,DPR,Downlink,Save-Data,Viewport-Width,Width,Content-Type(只有三个值 application/x-www-form-urlencoded,multipart/form-data,text/plain)
如果客户端希望通过PUT,DELETE等方式请求服务器的资源,则需要在服务器端,通过Access-Control-Allow-Mwthods来指明实际请求所允许使用的HTTP方法.
预检请求
只要符合以下任何一个条件的请求,都需要进行预检请求:
(1)请求方式为GET,POST,HEAD之外的请求Method类型
(2)请求头中包含自定义头部字段
(3)向服务器发送了application/json格式的数据
//只允许POST,GET,DELETE,HEAD请求方法
res.setHeader('Access-Control-Allow-Methods','POST','GET','DELETE','HEAD')
//允许所有的http请求方法
res.setHeader('Access-Control-Allow-Methods','*')
简单请求和预检请求的区别
简单请求的特点:客户端与服务器之间只会发生一次请求.
预检请求的特点:客户端与服务器之间会发生两次请求,OPTION预检请求成功后,才会发起真正的请求.
使用SQL管理数据库
1.什么是SQL
SQL是结构化查询语言,专门用来访问和处理数据库的编程语言,能够让我们以编程的形式,操作数据库里面的数据
三个关键点:
- SQL是一门数据库编程语言
- 使用SQL语言编写出来的代码,叫做SQL语句
- SQL语言只能在关系型数据库中使用(例如 MySQL,Oracle,SQL Server),非关系型数据库(例如Mongodb)不支持SQL语言.
2.SQL能做什么
(1)从数据库中查询数据
(2)向数据库中插入新的数据
(3)更新数据库中的数据
(4)从数据库中删除数据
(5)创建新的数据库
(6)在数据库中创建新表
(7)在数据库中创建存储过程,视图
掌握4种SQL语法
where条件,and和or运算符,order by排序,count(*)函数
Web开发模式
目前主流的Web开发模式有两种,分别是:
(1)基于服务端渲染的传统Web开发模式
(2)基于前后端分离的新型Web开发模式
服务端渲染的Web开发模式
服务端渲染的概念:服务器发送给客户端的HTML页面,是在服务器通过字符串的拼接,动态生成的。因此,客户端不需要使用Ajax这样的技术额外请求页面的数据。
前后端分离的Web开发模式
前后端分离的概念:前后端分离的开发模式,依赖于Ajax技术的广泛应用。简而言之,前后端分离的web开发模式,就是后端只负责提供API接口,前端使用Ajax调用接口的开发模式。
Session认证机制
什么是cookie?
cookie是存储在用户浏览器中的一段不超过4KB的字符串,它由一个名称,一个值和其他几个用于控制cookie有效期、安全期、使用范围的可选属性组成。
不同域名下的cookie各自独立、每当客户端发起请求,会自动把当前域名下所有未过期的cookie一同发送到服务器,cookie的几大特性:
1.自动发送
2.域名独立
3.过期时限
4.4KB限制
Session认证机制
//用户登录api
app.post('/api/login',()=>{
//判断用户登录的信息是否正确
//req.body获得请求体的数据
//判断用户提交的信息是否正确
if(req.body.username!=='admin'||req.body.username!=='000000'){
return res.send({status:1,msg:'登录失败'})
}
//如果登录成功,将登录成功后的用户信息保存到session中
//只有成功配置express-session这个中间件后,才可以通过req点出来session这个属性
req.session.user=req.body //给session添加user属性,这个属性中包括username,password
req.session.islogin=true
res.send({status:0,msg:'登录成功'})
})
//获取用户姓名的接口
app.get('/api/username',(req,res)=>{
if(!req.session.islogin){
return res.send(status:1,msg:'fail')
}
res.send({status:0,
msg:'success',
username:req.session.user.username
})
})
//退出登录接口
app.post('/api/logout',(req,res)=>{
//清空当前客户端对应的session信息 调用req.session.destroy()函数
req.session.destroy()
res.send({
status:0.,
msg:'退出登录成功!'
})
})
连接mysql数据库
// 导入mysql模块
const mysql = require('mysql')
// 创建数据库连接对象
const db = mysql.createPool({
host: '127.0.0.1',
user: 'root',
password: 'admin123',
database: 'my_db_01'
})
// 向外共享数据库连接对象
module.exports = db
express-jwt----解析token字符串