Vue.jsVue.js专区工具集

vue利器之Axios入门

2019-04-01  本文已影响7人  前端一菜鸟

axios是基于promise用于浏览器和node.js的http客户端。
axios的作用是什么呢:axios主要是用于向后台发起请求的,还有在请求中做更多是可控功能。有以下特点:支持浏览器和node.js、支持promise、能拦截请求和响应、能转换请求和响应数据、能取消请求、自动转换JSON数据、浏览器端支持防止CSRF(跨站请求伪造)
promise是什么:是一个对象用来传递异步操作的信息,它代表了某个未来才会知道结果的事件(通常是一个异步操作),并且这个事件提供统一的api,可供进一步的处理。promise的作用:Promise的出现主要是解决地狱回调的问题,比如你需要结果需要请求很多个接口,这些接口的参数需要另外那个的接口返回的数据作为依赖,这样就需要我们一层嵌套一层,但是有了Promise 我们就无需嵌套。promise的本质是什么:分离异步数据获取和业务

1、axios基础用法

1.1、get请求demo

// 为给定 ID 的 user 创建请求
axios.get('/user?ID=12345')
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

// 可选地,上面的请求可以这样做
axios.get('/user', {
    params: {
      ID: 12345
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

1.2、post请求demo

axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

1.3、执行多个并发请求

function getUserAccount() {
  return axios.get('/user/12345');
}

function getUserPermissions() {
  return axios.get('/user/12345/permissions');
}

axios.all([getUserAccount(), getUserPermissions()])
  .then(axios.spread(function (acct, perms) {
    // 两个请求现在都执行完成
  }));

1.4、API

1.4.1 请求配置

axios.get('/user', {
    params: {
      ID: 12345
    },
    // `timeout` 指定请求超时的毫秒数(0 表示无超时时间)
    // 如果请求话费了超过 `timeout` 的时间,请求将被中断
    timeout: 1000,
    // `withCredentials` 表示跨域请求时是否需要使用凭证
    withCredentials: false, // 默认的
    // 'proxy' 定义代理服务器的主机名称和端口
    // `auth` 表示 HTTP 基础验证应当用于连接代理,并提供凭据
    // 这将会设置一个 `Proxy-Authorization` 头,覆写掉已有的通过使用 `header` 设置的自定义 `Proxy-Authorization` 头。
    proxy: {
      host: '127.0.0.1',
      port: 9000,
      auth: : {
        username: 'mikeymike',
        password: 'rapunz3l'
      }
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

1.4.2 响应结构

{
  // `data` 由服务器提供的响应
  data: {},
  // `status` 来自服务器响应的 HTTP 状态码
  status: 200,
  // `statusText` 来自服务器响应的 HTTP 状态信息
  statusText: 'OK',
  // `headers` 服务器响应的头
  headers: {},
  // `config` 是为请求提供的配置信息
  config: {}
}

1.5 全局的 axios 默认值

axios.defaults.timeout  = 2000;
axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

2、axios和vue结合

2.1 get

const SERVERIP = "";
export const apiLogin = (userid, password) => {
  return axios.get(`${SERVERIP}/api/login/login?userid=${userid}&password=${password}`);
}
import { apiLogin } from "./api/api.js";
apiLogin(this.userid, this.pwd).then(res => {
        
});

2.2 post

const SERVERIP = "";
export const updateUserPwd = (params) => {
  return axios({
    method: 'post',
    url: `${SERVERIP}/api/user/update`,
    data: params
  })
}
import { apiLogin } from "./api/api.js";
obj = JSON.stringify(obj);
updateUserPwd(obj).then(res => {
  
});

3、同步实现

3.1 、简单模式实现

getBu();

function chinaCity(){
    // return axios.get('./lib/chinaCity.json')
    return axios.get('./lib/chinaCity.json',{
        params:{                    //传值模式
            id:222
        }
    })
}

async function getBu(){
    var data = await chinaCity();
    console.log(data)
}

3.1 、常用模式

const SERVERIP = "";
export const apiLogin = (userid, password) => {
  return axios.get(`${SERVERIP}/api/login/login?userid=${userid}&password=${password}`);
}
import { apiLogin } from "./api/api.js";
methods: {
  async myLogin(){
    var res = await apiLogin(this.userid, this.pwd);
    console.log(res.data)
  }
}
上一篇下一篇

猜你喜欢

热点阅读