美文网首页
数据请求相关(json-server、postman、axios

数据请求相关(json-server、postman、axios

作者: squidbrother | 来源:发表于2022-12-11 20:24 被阅读0次

概述
json-server : 一个快速开发的服务器,testful风格的接口,数据可以在对应文件内编辑
postman : 模拟数据,请求接口
网络基础相关
axios : 数据请求的包,拥有好用的请求拦截器,响应拦截器

json-server (快速建立一个服务器,并将数据放在一个json文件内)

  1. 安装: 全局安装即可
npm install json-server -g
  1. 使用:指定文件夹内执行
json-server xxx.json   //没有xxx.json,则创建并打开,有则打开
  1. 手动修改数据结构
    使用sublime或记事本打开 xxx.json,手动编辑即可,如同操作json数据结构一样

  2. 一些特性与问题

  • 添加的数据,如果数据带id参数,则按照你的添加;如果数据没有id参数,则自动会添加,id在数据现有id上累加;
  • resetful风格,同一个接口,使用put更新、delete删除时候,id必须要使用params方式,不能写在body请求体内;

postman (请求服务器接口的客户端)

  1. 安装:
    前往官网(www.postman.com),下载PC系统对应的安装文件(Download the desktop app)

  2. 使用:

  • 打开软件

  • 创建一个免费的Team Workspace

  • 点击右侧顶部 '+' 号,创建一个网络请求
    params参数写在url里面;
    query参数可以通过下面选项卡的Params写,也可以直接在url里,通过?xxx=xxx&xxx=xxx来自行书写;


    页面常规参数展示
  • POST参数, 选择Body请求体,现在raw,选择数据格式json


    配置post请求参数

网络基础相关

网络请求的三个组成部分( 请求行、请求头 、请求体 )

  1. 请求行 (method url)

  2. 请求头

  • Host: 请求地址
  • Cookie: 权限缓存
  • Content-Type: x-www-form-urlencode 或者 application/json
  1. 请求体
  • x-www-form-urlencode : username=tom&pwd=123
  • application/json : { "username": tom, "pwd": 123 }
  1. 常见状态码
状态码 英文描述 中文描述
200 OK 请求成功
201 Created 已创建,成功请求并创建了新的资源
401 Unauthorized 未授权/请求要求用户的身份认证
404 Not Found 服务器无法根据客户端找到资源
500 Internal Server Error 服务器内部错误
  1. API分类
  2. restful 风格
  • 发送请求,由请求方式来决定
  • 同一个路径可以进行多个操作
  • 请求可以使用到 GET/POST/PUT/DELETE
  1. restless 风格
  • 发送请求,由请求地址来决定
  • 一个请求路径只对应一种操作
  • 一般只有 GET/POST

axios (数据请求第三方包)

※ 安装:
通过npm安装 npm install axios -S 或者 通过CDN引用远程地址

※ 使用:

  1. 简写方式
  • GET 方式
axios.get('http://localhost:3000/students/16').then(response=>{
    console.log(response.data.name);
},error=>{
    console.log(error);
});
  • POST 方式
axios.post('http://localhost:3000/students/',{name:'小乐'}).then(response=>{
    console.log(response.data.name);
},error=>{
    console.log(error);
});
  1. post 请求体的两种书写方式
    第1种,携带请求体参数 (application/json编码) -- data: { name:zhangsan, age:18 }
    第2种,携带请求体参数 (application/x-www-form-urlencoded编码) -- data:'name=zhangsan&age=18'
axios({
    url: 'http://localhost:3000/students'
    method: 'POST',
    data: { name:zhangsan, age:18 }
.then(
    response => { console.log( 成了 ,response.data); },
    error => { console.log( 失败了 ,error); }
);
  1. 请求拦截器
  • CancelToken是axios的一个构造函数,用来创建某个请求的取消函数
  • CancelToken接收一个参数,用来说明取消信息
  • 接收一个config参数,并且必须返回这个config,可以在返回前配置请求头信息,均可以在config内找到
//结构一个可以实例出某个取消请求的构造函数
const { CancelToken } = axios;
//定义一个取消某个定时器的函数
let _axiosCancelFn = null;
//拦截器中配置取消的方法 - (全局统一配置)
axios.interceptors.request.use(function(config){
    //一个请求节流器
        //如果在这里做请求节流,那么axios.all永远不会完成执行(不建议此处写节流)
    if(_axiosCancelFn){
        //给变量 _axiosCancelFn 赋值,对应这次axios请求的取消函数
        //这个取消函数,接收一个字符串参数,用来说明取消原因; _axiosCancelFn('单纯的不想请求数据了');
        _axiosCancelFn('单纯的不想请求数据了'); 
    };
    config.cancelToken = new CancelToken((c)=>{
        _axiosCancelFn = c;
    });
    return config;
});
  1. 响应拦截器
  • 响应拦截器接收两个参数,参数为函数,函数的各自参数分别为response与error
  • 通过isCancel可以判断是否触发了,手动取消网络请求
  • 错误分支可以返回一个没有reslove的promise,来停止错误走向axios的错误分支,实现统一管理错误信息
  • 因为统一管理了错误处理,axios中直接书写正确的流程即可
const { CancelToken,isCancel } = axios;

//响应拦截器
axios.interceptors.response.use(
    (response) => { return response; },
    (error) => {
        //查看是否为人为取消请求
        if(isCancel(error)){
            console.log('请求失败:',error.message);
        }else{
            console.log('请求失败:',error);
        };
        //停止axios请求中的error流程
        return new Promise(()=>{});
    }
);
  1. axios的批量请求 - axios.all
  • 做批量请求,不能在请求拦截器内,通过取消操作,进行请求防抖,否则永远不会一起完成
  • 多个promise请求,是逐一完成的,要一起请求,所有请求结束,返回结果,需要使用axios.all
  • axios.all 内部实现是通过 promise.all
//批量请求
;(async function(){
    try{
        //以为axios.all的特性,要等所有结果都回来才行,如果在请求拦截器,通过CancelToken的取消方法做防抖,那么除了最后一项会执行完毕,都会失败,这样这个.all函数永远不会有执行结果。
        //请求了~~~~~~~~~~~~~~              触发了3次
        //请求失败: 单纯的不想请求数据了     触发了2次
        axios.all([
            axios.get('http://localhost:3000/students/11'),
            axios.get('http://localhost:3000/students/14'),
            axios.get('http://localhost:3000/students/15')
        ]).then(
            (response)=>{
                response.forEach(item => {
                    console.log(item.data.name);
                });
            },
            (error)=>{
                console.log(error);
            }
        );
    }catch(err){
        console.log(err);
    };
})();
  1. axios的请求配置 - 全局配置
axios.defaults.baseURL = 'http://xxxxx';
axios.default.timeout = 2000;
axios.defaults.headers= { token:' xxxxxx ' };
  1. axios创建克隆体 - 局部配置
  • 创建克隆体 不支持 批量请求操作axios.all
  • 创建克隆体 不支持 取消请求操作
//axios2为克隆体
const axios2 = axios.create({
    timeout: 3000,
    baseURL:'http://xxxxx'
})
  1. 请求操作中通过async和await实现更加优雅的写法

※ 关于async

  • async函数返回值为promise对象
  • promis实例结果由async函数执行的返回值决定
    ※ 关于await
  • await右侧是一个promise实例对象
  • 如果表达式是其他值,直接将这个值作为await的返回值
    ※ 特别注意
  • await必须写在async函数中,但是async函数中可以没有await
  • 如果await的promise实例对象失败,就会抛出异常,需要通过try...catch来处理
//快速获取某学生信息
_btn4.onclick = async function(){
    try{
        var _resData = await axios.get('/students/16');
        console.log(_resData.data.name);
    }catch(err){
        console.log(err);
    };
};

相关文章

网友评论

      本文标题:数据请求相关(json-server、postman、axios

      本文链接:https://www.haomeiwen.com/subject/udcpnktx.html