赞
踩
json-serve可以快速搭建一个具有RESTful风格的后台服务器,为前端提供后台的接口和数据的调用。
json-serve官网:json-serve
npm install -g json-server
db.json
,用于存放前台要调用的数据{
"posts": [
{ "id": 1, "title": "json-server", "author": "typicode" }
],
"comments": [
{ "id": 1, "body": "some comment", "postId": 1 }
],
"profile": { "name": "typicode" }
}
json-server --watch db.json
4.访问http://localhost:3000/posts/1,你会得到
{ "id": 1, "title": "json-server", "author": "typicode" }
db.json
文件中{"name": "Foobar"}
)db.json
文件中定义的键的值。axios官网:axios
基本使用1:记得导入axios包
<!DOCTYPE html> <html lang="en"> <head> <!-- 引入样式文件和axios包 --> <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script> <title>Axios基本使用</title> </head> <body> <div class="container"> <h2 class="page-header">Axios基本使用</h2> <button class="btn btn-primary">发送GET请求</button> <button class="btn btn-warning">发送POST请求</button> <button class="btn btn-success">发送PUT请求</button> <button class="btn btn-danger">发送DELETE请求</button> </div> <script> //获取按钮 const btn = document.querySelectorAll('button'); //发送ajax请求,类型为GET //从服务度获取指定id的json数据 btn[0].onclick = function() { axios({ method: 'get', url: 'http://localhost:3000/posts/3' }).then((result) => { console.log(result) }); } //发送ajax请求,类型为POST //添加一条数据 btn[1].onclick = function() { axios({ method: 'post', url: 'http://localhost:3000/posts', data: {title: "朱阳策", author: "沈峤" } }).then((result) => { console.log(result) }); } //发送ajax请求,类型为PUT //修改指定id的数据 btn[2].onclick = function() { axios({ method: 'put', url: 'http://localhost:3000/posts/2', data: {title: "朱阳策", author: "沈峤" } }).then((result) => { console.log(result) }); } //发送ajax请求,类型为Delete //删除指定id的数据 btn[3].onclick = function() { axios({ method: 'delete', url: 'http://localhost:3000/posts/3', }).then((result) => { console.log(result) }); } </script> </body> </html>
基本使用2
<!DOCTYPE html> <html lang="en"> <head> <!-- 引入样式文件和axios包 --> <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script> <title>Axios基本使用</title> </head> <body> <div class="container"> <h2 class="page-header">基本使用</h2> <button class="btn btn-primary">发送GET请求</button> <button class="btn btn-warning">发送POST请求</button> <button class="btn btn-success">发送PUT请求</button> <button class="btn btn-danger">发送DELETE请求</button> </div> <script> //获取按钮 const btn = document.querySelectorAll('button'); //发送ajax请求,类型为get //获取指定id的数据 btn[0].onclick = function() { axios.request({ method: 'get', url: 'http://localhost:3000/posts/3' }).then((result) => { console.log(result) }); } //发送ajax请求,类型为POST //添加一条数据 btn[1].onclick = function(){ axios.post('http://localhost:3000/comments', { body: "上阳", postId: 1 }).then((result) => { console.log(result) }) } //发送ajax请求,类型为PUT //修改指定id的数据 btn[2].onclick = function() { axios.put('http://localhost:3000/posts/2', { title: "天天", author: "沈峤" }).then((result) => { console.log(result) }); } //发送ajax请求,类型为Delete //删除指定id的数据 btn[3].onclick = function() { axios.delete('http://localhost:3000/posts/3').then((result) => { console.log(result) }); } </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <!-- 引入axios资源包文件 --> <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script> <title>axios的默认配置</title> </head> <body> <div class="container"> <h2 class="page-header">axios的默认配置</h2> <button class="btn btn-primary">发送GET请求</button> </div> <script> //获取按钮 const btn = document.querySelectorAll('button'); //配置axios的默认配置,使用默认的配置可以减少url的地址,和一些重复的基础配置 axios.defaults.baseURL = 'http://localhost:3000/' axios.defaults.method = 'get' axios.defaults.params = {id:1} axios.defaults.timout = 3000 //发送ajax请求,类型为get btn[0].onclick = function() { axios.request({ url: '/posts' }).then((result) => { console.log(result) }); } </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script> <title>创建Axios对象</title> </head> <body> <div class="container"> <h2 class="page-header">创建Axios对象</h2> <button class="btn btn-primary">发送GET请求</button> </div> <script> //获取按钮 const btn = document.querySelectorAll('button'); //创建axios对象,并配置基本的配置 const instance = axios.create({ baseURL: 'http://localhost:3000/', timeout: 2000 }); //发送ajax请求,类型为get btn[0].onclick = function() { //使用创建的对象来发送get请求 instance.get('/posts').then(result => { console.log(result) }) } </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <!-- 导入axios包 --> <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script> <title>axios拦截器</title> </head> <body> <div class="container"> <h2 class="page-header">axios拦截器</h2> <button class="btn btn-primary">发送GET请求</button> </div> <script> // 添加一个请求拦截器,config为请求的全部配置,包括请求的数据,可以对请求数据做校验和格式化请求数据 axios.interceptors.request.use(function (config) { console.log('请求拦截器 成功-1') //throw "参数异常" //加入请求参数 config.params = {id:2} return config; }, function (error) { //失败回调 consolel.log("请求拦截器 失败-1") return Promise.reject(error); }); axios.interceptors.request.use(function (config) { console.log('请求拦截器 成功-2') //throw "参数异常" //设置响应时间 config.timeout = 2000 return config; }, function (error) { consolel.log("请求拦截器 失败-2") return Promise.reject(error); }); //添加一个响应拦截器,response为响应的数据,包括响应的数据,可以使用响应拦截器做返回数据的格式化 axios.interceptors.response.use(function (response) { console.log('响应拦截器 成功-1') return response.data; //return response; }, function (error) { //失败回调 console.log('响应拦截器 失败-1') return Promise.reject(error); }); axios.interceptors.response.use(function (response) { console.log('响应拦截器 成功-2') return response; }, function (error) { //失败回调 console.log('响应拦截器 失败-2') return Promise.reject(error); }); //获取按钮 const btn = document.querySelectorAll('button'); //发送ajax请求,类型为get btn[0].onclick = function() { axios({ method: 'get', url: 'http://localhost:3000/posts', }).then(result => { console.log('最终结果如下:') console.log(result) }).catch(reason =>{ console.log('异常结果如下:') console.log(reason) }) } </script> </body> </html>
请求拦截器是后进先调用,响应拦截器是先进先调用。
如果请求拦截器-1中的请求出现异常,控制台打印结果如下:
到达请求拦截器-1抛出参数异常后,就会直接调用响应拦截器-1的失败回调方法,返回一个Promis对象后在调用响应拦截器-2的失败回调方法,最后给调用者捕获异常后输出异常信息。
基本流程
配置 cancelToken 对象
缓存用于取消请求的 cancel 函数
在后面特定时机调用 cancel 函数取消请求
在错误回调中判断如果 error 是 cancel,做相应处理
实现功能
json-serve配置响应的一个延时,便于取消请求,否则一发请求就立马响应,来不及取消请求,配置命令如下:
<!DOCTYPE html> <html lang="en"> <head> <!-- 导入axios包 --> <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script> <title>Axios基本使用</title> </head> <body> <div class="container"> <h2 class="page-header">axios取消请求</h2> <button class="btn btn-primary">发送请求</button> <button class="btn btn-warning">取消请求</button> </div> <script> //获取按钮 const btn = document.querySelectorAll('button'); //定义一个全局变量 let cancel = null; //发送ajax请求,类型为get btn[0].onclick = function() { if(cancel != null){ //处理用户连续点击,服务器压力问题,每次先判断,之前的请求是否完成,没有就取消请求重新发送请求 //取消上一次的请求 cancel(); } axios({ method: 'get', url: 'http://localhost:3000/posts', //配置cancelToken对象,并给定义的全局变量赋值 cancelToken: new axios.CancelToken(function(c){ cancel = c; }) }).then(result => { cancel = null; console.log('最终结果如下:') console.log(result) }) } //绑定取消点击事件 btn[1].onclick = function(){ //调用定义的全局变量的方法,名称要相同 cancel(); } </script> </body> </html> /配置cancelToken对象,并给定义的全局变量赋值 cancelToken: new axios.CancelToken(function(c){ cancel = c; }) }).then(result => { cancel = null; console.log('最终结果如下:') console.log(result) }) } //绑定取消点击事件 btn[1].onclick = function(){ //调用定义的全局变量的方法,名称要相同 cancel(); } </script> </body> </html>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。