javaWeb axios

Axios

一、简介

Axios 是一个基于 promise 的网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。

特性:

从浏览器创建 XMLHttpRequests

从 node.js 创建 http 请求

支持 Promise API

拦截请求和响应

转换请求和响应数据

取消请求

自动转换JSON数据

客户端支持防御XSRF

二、具体实例介绍

App.Vue

```html

<script setup type="module">

import axios from 'axios'

import { onMounted,reactive } from 'vue';

let jsonData =reactive({code:1,content:'我努力不是为了你而是因为你'})

let getLoveMessage =()=>{

axios({//axios方法返回一个promise的实例

method:"post", // 请求方式

url:"https://api.uomg.com/api/rand.qinghua?format=json", // 请求的url

data:{ // 当请求方式为post时,data下的数据以JSON串放入请求体,否则以key=value形式放url后

username:"123456"

}

}).then( function (response){//响应成功时要执行的函数

console.log(response)

Object.assign(jsonData,response.data)

}).catch(function (error){// 响应失败时要执行的函数

console.log(error)

})

}

/* 通过onMounted生命周期,自动加载一次 */

onMounted(()=>{

getLoveMessage()

})

</script>

<template>

<div>

<h1>今日土味情话:{{jsonData.content}}</h1>

<button @click="getLoveMessage">获取今日土味情话</button>

</div>

</template>

<style scoped>

</style>

Axios get和post方法

> 配置添加语法

``` javascript

axios.get(url[, config])

axios.get(url,{

上面指定配置key:配置值,

上面指定配置key:配置值

})

axios.post(url[, data[, config]])

axios.post(url,{key:value //此位置数据,没有空对象即可{}},{

上面指定配置key:配置值,

上面指定配置key:配置值

})

```

> 测试get参数

async function getMessage(){

return await axios.get(

Url,

{向url后添加的键值对参数},

Headers:{设置请求头}

)

}

``` html

<script setup type="module">

import axios from 'axios'

import { onMounted,ref,reactive,toRaw } from 'vue';

let jsonData =reactive({code:1,content:'我努力不是为了你而是因为你'})

let getLoveWords= async ()=>{

try{

return await axios.get(

'https://api.uomg.com/api/rand.qinghua',

{

params:{// 向url后添加的键值对参数

format:'json',

username:'zhangsan',

password:'123456'

},

headers:{// 设置请求头

'Accept' : 'application/json, text/plain, text/html,*/*'

}

}

)

}catch (e){

return await e

}

}

let getLoveMessage =()=>{

let {data} = await getLoveWords()

Object.assign(message,data)

}

/* 通过onMounted生命周期,自动加载一次 */

onMounted(()=>{

getLoveMessage()

})

</script>

<template>

<div>

<h1>今日土味情话:{{jsonData.content}}</h1>

<button @click="getLoveMessage">获取今日土味情话</button>

</div>

</template>

<style scoped>

</style>

```

> 测试post参数

async function PostMessage(){

return await axios.post(

{url的地址},

{请求体中的json数据},

{需要放进标头的键值对参数}

)

}

```html

<script setup type="module">

import axios from 'axios'

import { onMounted,ref,reactive,toRaw } from 'vue';

let jsonData =reactive({code:1,content:'我努力不是为了你而是因为你'})

let getLoveWords= async ()=>{

try{

return await axios.post(

'https://api.uomg.com/api/rand.qinghua',

{//请求体中的JSON数据

username:'zhangsan',

password:'123456'

},

{// 键值对参数

params:{// url上拼接的键值对参数

format:'json',

},

headers:{// 请求头

'Accept' : 'application/json, text/plain, text/html,*/*',

'X-Requested-With': 'XMLHttpRequest'

}

}

)

}catch (e){

return await e

}

}

let getLoveMessage =()=>{

let {data} = await getLoveWords()

Object.assign(message,data)

}

/* 通过onMounted生命周期,自动加载一次 */

onMounted(()=>{

getLoveMessage()

})

</script>

<template>

<div>

<h1>今日土味情话:{{jsonData.content}}</h1>

<button @click="getLoveMessage">获取今日土味情话</button>

</div>

</template>

<style scoped>

</style>

```

拦截器

如果想在axios发送请求之前,或者是数据响应回来在执行then方法之前做一些额外的工作,可以通过拦截器完成

添加请求拦截器 请求发送之前:

axios.interceptors.request.use(

function (config) {

// 在发送请求之前做些什么

return config;//必须返回config

},

function (error) {

// 对请求错误做些什么

return Promise.reject(error);

}

);

添加响应拦截器 数据响应回来 :

axios.interceptors.response.use(

function (response) {

// 2xx 范围内的状态码都会触发该函数。

// 对响应数据做点什么

return response;

},

function (error) {

// 超出 2xx 范围的状态码都会触发该函数。

// 对响应错误做点什么

return Promise.reject(error);

}

);

  • 定义src/axios.js提取拦截器和配置语法

Axios.js:

import axios from 'axios'

// 创建instance实例

const instance = axios.create({

baseURL:'https://api.uomg.com',

timeout:10000

})

// 添加请求拦截

instance.interceptors.request.use(

// 设置请求头配置信息

config=>{

//处理指定的请求头

console.log("before request")

config.headers.Accept = 'application/json, text/plain, text/html,*/*'

return config

},

// 设置请求错误处理函数

error=>{

console.log("request error")

return Promise.reject(error)

}

)

// 添加响应拦截器

instance.interceptors.response.use(

// 设置响应正确时的处理函数

response=>{

console.log("after success response")

console.log(response)

return response

},

// 设置响应异常时的处理函数

error=>{

console.log("after fail response")

console.log(error)

return Promise.reject(error)

}

)

// 默认导出

export default instance

```

  • App.vue

```html

<script setup type="module">

// 导入我们自己定义的axios.js文件,而不是导入axios依赖

import axios from './axios.js'

import { onMounted,ref,reactive,toRaw } from 'vue';

let jsonData =reactive({code:1,content:'我努力不是为了你而是因为你'})

let getLoveWords= async ()=>{

try{

return await axios.post(

'api/rand.qinghua',

{

username:'zhangsan',

password:'123456'

},//请求体中的JSON数据

{

params:{

format:'json',

}

}// 其他键值对参数

)

}catch (e){

return await e

}

}

let getLoveMessage =()=>{

// 这里返回的是一个fullfilled状态的promise

getLoveWords().then(

(response) =>{

console.log("after getloveWords")

console.log(response)

Object.assign(jsonData,response.data)

}

)

}

/* 通过onMounted生命周期,自动加载一次 */

onMounted(()=>{

getLoveMessage()

})

</script>

<template>

<div>

<h1>今日土味情话:{{jsonData.content}}</h1>

<button @click="getLoveMessage">获取今日土味情话</button>

</div>

</template>

<style scoped>

</style>

相关推荐
Book思议-17 小时前
顺序表和链表核心差异与优缺点详解
java·数据结构·链表
小杨的博客18 小时前
Java + Selenium实现浏览器打印功能
java·selenium
wefly201718 小时前
M3U8 播放调试天花板!m3u8live.cn纯网页无广告,音视频开发效率直接拉满
java·前端·javascript·python·音视频
兆子龙18 小时前
antd 组件也做了同款效果!深入源码看设计模式在前端组件库的应用
java·前端·架构
祁梦18 小时前
Redis从入门到入土 --- 黑马点评判断秒杀资格
java·后端
兆子龙18 小时前
lodash 到 lodash-es 多的不仅仅是后缀!深入源码看 ES Module 带来的性能与体积优化
java·前端·架构
Memory_荒年18 小时前
限流算法:当你的系统变成“网红景点”,如何避免被游客挤垮?
java·后端
我命由我1234518 小时前
Git 问题:Author identity unknown*** Please tell me who you are.
java·服务器·git·后端·学习·java-ee·学习方法
Arya_aa18 小时前
java中的方法重写,重载,接口和抽象类
java
xiaoye370818 小时前
Spring 内置注解 和自定义注解的异同
java·后端·spring