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>

相关推荐
Java知识库24 分钟前
2025秋招后端突围:JVM核心面试题与高频考点深度解析
java·jvm·程序员·java面试·后端开发
南枝异客31 分钟前
四数之和-力扣
java·算法·leetcode
英杰.王36 分钟前
深入 Java 泛型:基础应用与实战技巧
java·windows·python
Leaf吧39 分钟前
java BIO/NIO/AIO
java·开发语言·nio
IT_10241 小时前
springboot从零入门之接口测试!
java·开发语言·spring boot·后端·spring·lua
湖北二师的咸鱼2 小时前
c#和c++区别
java·c++·c#
weixin_418007602 小时前
软件工程的实践
java
jinzong532 小时前
服务器快速搭建WebDAV/Venera开源漫画实现跨设备同步
web·webdav
lpfasd1233 小时前
备忘录模式(Memento Pattern)
java·设计模式·备忘录模式
迢迢星万里灬3 小时前
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术点解析
java·spring boot·spring·mybatis·spring mvc·面试指南