• Vue 学习之 axios


    目录

    执行安装命令:npm install axios

     使用的时候导入

    axios以data,params,headers传参方式的区别

    axios封装


    是一个基于 promise 的 网络请求库,作用于浏览器和 node.js 中。使用Axios可以在前端项目中发送各种方式的HTTP请求。

    停止服务,在所在项目终端,

    执行安装命令:npm install axios

    查看是否安装成功,依赖中存在axios就是安装成功

     使用的时候导入

    import axios from 'axios'

    axios 官网

    请求配置 | Axios中文文档 | Axios中文网

    1. <template>
    2. 登录 <input type="button" @click="handss" />
    3. 状态 <input type="button" @click="state" />
    4. 两种形式 <input type="button" @click="twost" />
    5. template>
    6. <script>
    7. import axios from 'axios'
    8. export default {
    9. data() {
    10. },
    11. methods: {
    12. handss() {
    13. axios.post('/api/admin/employee/login', {
    14. username: 'admin',
    15. password: '123456'
    16. }).then(res => {
    17. console.log(res.data)
    18. }).catch(error => {
    19. console.log(error.response)
    20. })
    21. },
    22. state() {
    23. axios.get('/api/admin/shop/status', {
    24. headers: {
    25. token: 'eyJhbGciOiJIUzI1NiJ9.eyJlbXBJZCI6MSwiZXhwIjoxNzE5MTEzNzg1fQ.e1lKC_hCAw1jAKzqgkIUEzWlJ0iDBqSQUs8-L4EUYgI'
    26. }
    27. })
    28. },
    29. twost() {
    30. axios({
    31. url: '/api/admin/employee/login',
    32. method: 'post',
    33. data: {
    34. username: 'admin',
    35. password: '123456'
    36. }
    37. }).then((res) => {
    38. console.log(res.data.data.token)
    39. }).catch((error)=>{
    40. console.log(error)
    41. })
    42. }
    43. }
    44. }
    45. script>

     

    axios以data,params,headers传参方式的区别

    • params的对象参数名和值,axios的源码会把参数和值,拼接在ulr?后面拼接给后台

    • data的对象参数和值,axios源码会把参数和值,拼接·在请求体(body参数)

    • headers将传递的参数挂载到请求头

    axios封装

    下面几乎 就是固定写法,拿来就用,封装了基础的路径,对每个请求进行拦截并添加token,

    1. import axios from 'axios'
    2. const instance = axios.create({
    3. // 基路径
    4. baseURL: 'http://localhost:8080/kongkongSelect',
    5. timeout: 1000,
    6. });
    7. // 添加请求拦截器
    8. instance.interceptors.request.use(function (config) {
    9. // 在发送请求之前做些什么
    10. // 存在token则往header里面添加一个token
    11. if(localStorage.getItem('token')){
    12. config.headers.token=localStorage.getItem('token')
    13. }
    14. return config;
    15. }, function (error) {
    16. // 对请求错误做些什么
    17. return Promise.reject(error);
    18. });
    19. // 添加响应拦截器
    20. instance.interceptors.response.use(function (response) {
    21. // 2xx 范围内的状态码都会触发该函数。
    22. // 对响应数据做点什么
    23. // 如果后台报错提示一下 ,后台报错和axios 报错 执行的位置不一样
    24. if(response.data.code!=200){
    25. // 提示一下
    26. }
    27. //这个地方返回的东西就是你调用的时候res得到的东西
    28. return response;
    29. }, function (error) {
    30. //axios报错执行这里
    31. // 超出 2xx 范围的状态码都会触发该函数。
    32. // 对响应错误做点什么
    33. return Promise.reject(error);
    34. });
    35. // 最后导出
    36. export default instance

    最后需要export default  ,export default  和export 区别看这篇文章

    export 与export default 区别

    http://t.csdnimg.cn/i7gOgicon-default.png?t=N7T8http://t.csdnimg.cn/i7gOg

    调用上面导出, export default则不需要{ },并可以起任意名称,因为只有一个不会引起歧义

    1. import request from '@/utils/request'
    2. /**
    3. *
    4. * 员工管理
    5. *
    6. **/
    7. // 登录
    8. export const login = (data: any) =>
    9. request({
    10. 'url': '/employee/login',
    11. 'method': 'post',
    12. // `data` 是作为请求体被发送的数据 仅适用 'PUT', 'POST', 'DELETE 和 'PATCH' 请求方法
    13. 'data': data
    14. })
    15. // 分页查询
    16. export const EmployeepageList = (params: any) =>
    17. request({
    18. 'url': `/employee/page`,
    19. 'method': 'get',
    20. // 可以简写为params,但前提是参数是params
    21. 'params':params
    22. })

    传递数据的时候一般传递的是JSON字符串

    注:在使用axios时,经常会遇到跨域问题。为了解决跨域问题,可以在 vue.config.js 文件中配置代理:

    1. const { defineConfig } = require('@vue/cli-service')
    2. module.exports = defineConfig({
    3. transpileDependencies: true,
    4. devServer:{
    5. port:8081,
    6. proxy:{
    7. '/api':{
    8. target: 'http://localhost:8080',
    9. pathRewrite: {
    10. '^/api': ''
    11. }
    12. }
    13. }
    14. }
    15. })

  • 相关阅读:
    注解学习总结
    2023-9-29 JZ27 二叉树的镜像
    【C++基础入门】41.C++中父子间的冲突
    vue3早已具备抛弃虚拟DOM的能力了
    Python 在 JMeter 中如何使用?
    TC8:UDP_INTRODUCTION_01-03
    Go语言必知必会100问题-20 切片操作实战
    梯度下降算法中的数据标准化预处理(Python实现)
    ZooKeeper的ZAB协议?
    基于BP神经网络的PID控制,基于单神经元的pid控制
  • 原文地址:https://blog.csdn.net/2201_75600005/article/details/139939841