vue-前后端交互-axios



目录




文章目录

  • 1、基本特性
  • 2、基本用法
  • 3、axios 常用API
  • 4、axios参数传递
  • 4.1、GET与DELETE请求方式
  • 4.2、POST和PUT请求方式
  • 5、axios响应数据
  • 5.1、响应结果的主要属性
  • 6、axios的全局配置
  • 6、axios拦截器
  • 6.1、请求拦截器
  • 6.2、响应拦截器
  • ***后记*** :





内容



1、基本特性

axios是一个基于Promise用于浏览器和nodejs的HTTP客户端,它具有以下特征:

  • 支持浏览器和nodejs
  • 支持promise
  • 能拦截请求和响应
  • 自动转换JSON

2、基本用法

  • 格式
axios.get(baseUrl)
  			.then(ret => {
  			// data属性名是固定的,用于获取用于后去后台响应的数据
  				console.log(ret.data);
  			})
  • 示例代码2-1:
// 后台路由
  app.get('/adata', (req, res) => {
    res.send('Hello axios!')
  })
  
  // 前端代码
  <!DOCTYPE html>
  <html lang="en">
  <head>
  	<meta charset="UTF-8">
  	<meta name="viewport" content="width=device-width, initial-scale=1.0">
  	<title>axios</title>
  </head>
  <body>
  	<script src="../../node_modules/axios/dist/axios.js"></script>
  	<script>
  		const baseUrl = 'http://localhost:3000/adata'
  		axios.get(baseUrl)
  			.then(ret => {
  				console.log(ret.data);
  			})
  	</script>
  </body>
  </html>
  
  // 结果
  Hello axios!

3、axios 常用API

  • get:获取
  • post:添加
  • put:修改
  • delete:删除

4、axios参数传递

4.1、GET与DELETE请求方式

DELETE请求方式与GET类似,这里一GET方式讲解。

  • URL传参
axios.get(url?query) 传统URL
  axios.get(url/query) Restful
  • 示例代码4.1-1:
// 后台路由:
  app.get('/axios', (req, res) => {
    res.send('axios get 传递参数' + req.query.id)
  })
  app.get('/axios/:id', (req, res) => {
    res.send('axios get (Restful) 传递参数' + req.params.id)
  })

  // 前端页面,省略其他本分(同上),只给出js代码

  const baseUrl = 'http://localhost:3000/axios'
  axios.get(baseUrl + '?id=122')
  	.then(ret => {
  		console.log(ret.data);
  	})

  axios.get(baseUrl + '/123')
  .then(ret => {
  	console.log(ret.data);

  // 结果
  axios get 传递参数122
  axios get (Restful) 传递参数123
  • params传参
axios.get(url, {
  	属性名1: 值1,
  	属性名2: 值2,
  	...
  })
  • 示例代码4.1-2:
// 后台路由
  app.get('/axios', (req, res) => {
    res.send('axios get 传递参数' + req.query.id)
  })
  // js代码
  axios.get(baseUrl, {
  			params: {
  				id: 124
  			}
  		})
  		.then(ret => {
  			console.log(ret.data);
  		})
  
  // 结果
  axios get 传递参数124

4.2、POST和PUT请求方式

PUT请求方式与POST类似,这里用POST方式讲解。

  • 通过选项传递参数(默认传递的是JSON数据)
axios.post(url, {
  			属性名1: 值1,
  			属性名2: 值2,
  			...
  		})
  • 示例代码4.2-1:
//后台路由
  app.post('/axios', (req, res) => {
    res.send('axios post 传递参数' + req.body.uname + '---' + req.body.pwd)
  })
  // 前端js
  const baseUrl = 'http://localhost:3000/axios'
  		 axios.post(baseUrl, {
  			params: {
  				uname: 'zhangsan',
  				pwd: '123'
  			}
  		})
  		.then(ret => {
  			console.log(ret.data);
  		})
  // 结果
  axios post 传递参数zhangsan---123
  • 通过URLSearchParams传递参数(application/x-www-form-encoded)
let params = new URLSearchParams()
  params.append('param1', 'value1')
  params.append('param2', 'value2')
  axios.post(url,params)
  • 示例代码4.2-2:
// 后台路由同上
  // 前端js
  let params = new URLSearchParams()
  		params.append('uname', 'zhangsna')
  		params.append('pwd', '123')
  		axios.post(baseUrl, params)
  			.then(ret => {
  				console.log(ret.data);
  			})

  params = 'uname=zhangsan&pwd=123'
  axios.post(baseUrl, params, {
  	headers: {
  		'Content-Type': 'application/x-www-form-urlencoded'
  	}
  })
  	.then(ret => {
  		console.log(ret.data);
  	})

  //结果:
  axios post 传递参数zhangsan---123

5、axios响应数据

5.1、响应结果的主要属性

  • data:实际响应会的数据
  • header:响应头信息
  • status:响应状态码
  • statusText:响应状态码描述

6、axios的全局配置

常用配置如下:

  • axios.default.timeout = … // 设置超时时间,单位ms
  • axios.default.baseURL = … // 设置域名基本路径,请求的时候,直接拼接请求方法中的url
  • axios.default.hdears = {…} // 设置请求头信息

6、axios拦截器

6.1、请求拦截器

在发出请求之前,设置一些信息

  • 格式
axios.interceptors.request.use(functions(config) {
  	// 信息设置
  	return config
  }, function(err) {
  	// 处理响应的错误信息
  })

常用于登录信息的校验等。

  • 添加mytoken已登录信息示例代码6.1-1
axios.interceptors.request.use(functions(config) {
  			config.header.mytoken = 'user'
  			return config
  		}, function(err) {
  			// 处理响应的错误信息
  		})

6.2、响应拦截器

在获取数据之前,对数据做一些加工处理

  • 格式
axios.interceptors.response.use(function(ret) {
  	if(ret.status !== 200) {
  		// 其他处理
  	}
  	// 200直接返回实际数据
  	return ret.data
  	
  }, function(err) {
  	// 处理响应错误
  })
  • 如果响应200就直接获取数据

axios.interceptors.response.use(function(ret) {

return ret

}, function(err) {
// 处理响应错误
})