• Vue中axios的基本用法


    目录

    1.什么是axios?

    2.axios的特征

    3.axios在使用的时候需要注意的细节 

    4.axios在vue中的实例运用(留言评论接口) 

    App.vue代码

    mian.js代码


     

    1.什么是axios?

    axios 是一个基于promise 用于浏览器和 nodejs 的 HTTP 客户端。简单的理解就是ajax的封装

    2.axios的特征

    1.     从浏览器中创建 XMLHttpRequest
    2.     从 node.js 发出 http 请求
    3.     支持 Promise API
    4.     拦截请求和响应
    5.     转换请求和响应数据
    6.     取消请求
    7.     自动转换JSON数据
    8.     客户端支持防止 CSRF/XSRF

    3.axios在使用的时候需要注意的细节 

    引用 axios 时 Vue.prototype.axios = axios  Vue.prototype.$axios = axios    Vue.prototype.$http = axios  其实是都一个东西,只是vue的原型链上加个变量(且变量不同),值是axios对象 。

    只是 一个是jquery封装过的异步调用方法    一个是vue推荐的第三方异步封装方法  他们都是调用的axios对象

    只是调用的时候 axios.post({..})   this.$axios.post({...})     this.$http.post({....})

    4.axios在vue中的实例运用(留言评论接口) 

    App.vue代码

    1. <template>
    2. <div>
    3. <h1>学习axiosh1>
    4. <div v-if="token">
    5. {{userInfo.name}} 积分:{{userInfo.score}} 等级:{{userInfo.rank}}
    6. <button @click="logout">退出button>
    7. div>
    8. <div class="login" v-else>
    9. <h3>登录h3>
    10. 用户名: <input type="text" v-model="user.name"> <br>
    11. 密码: <input type="password" v-model="user.password"> <br>
    12. <button @click="login">登录button>
    13. div>
    14. <div>
    15. <h3>添加留言h3>
    16. <textarea rows="" cols="" v-model="msg">
    17. textarea> <br>
    18. <button @click="sendMsg">发表留言button>
    19. div>
    20. <div class="list" v-if="feedlist.length">
    21. <div class="item" v-for="item in feedlist" :key="item.id">
    22. <h5>{{item.name}}h5>
    23. <p>{{item.msg}}p>
    24. <p>{{item.date}}p>
    25. <hr>
    26. div>
    27. div>
    28. <div class="pagnation" v-if="pagnation.pageTotal">
    29. <button :disabled="current<=1" @click="current--;getFeed()">上一页button>
    30. <span :class="{'active':current==item}" v-for="item in pagnation.pageTotal" :key="item"
    31. @click="current=item;getFeed()">{{item}}span>
    32. <button :disabled="current>=pagnation.pageTotal" @click="current++;getFeed()">下一页button>
    33. div>
    34. div>
    35. template>
    36. <script>
    37. export default {
    38. data() {
    39. return {
    40. msg: '', //需要添加的评论
    41. current: 1, //默认获取第一页评论
    42. feedlist: [], //笑话列表
    43. pagnation: {
    44. }, //分页信息
    45. user: {
    46. name: '',
    47. password: '',
    48. },
    49. // 从本地获取用户信息 parse 把json字符串转换为js对象
    50. userInfo: JSON.parse(localStorage.getItem("userInfo") || "{}"), //用户信息,
    51. // 从本地获取token,字符串不需要pase转
    52. token: localStorage.getItem("token"), //token
    53. }
    54. },
    55. // 组件创建完毕就加载
    56. created() {
    57. this.getFeed();
    58. },
    59. // 登录后显示用户信息
    60. methods: {
    61. sendMsg() {
    62. // 基础方法
    63. this.$axios({
    64. url: "/api/feed",
    65. method: "post",
    66. data: {
    67. msg: this.msg
    68. }
    69. })
    70. .then(res => {
    71. // alert(res.data.msg);
    72. if (res.data.code == 0) {
    73. // 让页面回归第一1
    74. this.current = 1;
    75. // 获取评论列表
    76. this.getFeed();
    77. // 清空评论框
    78. this.msg = '';
    79. }
    80. })
    81. },
    82. // 登录成功后,获取评论信息
    83. // 除了登录与注册,接口规定向服务器请求数据必须加上 请求头token
    84. // token一串加密的字符,包含了用户信息等..(后端靠token识别用户是否登录)
    85. getFeed() {
    86. this.$axios.get(
    87. "/api/feed?current=" + this.current, //请求url
    88. // {
    89. // headers:{
    90. // "Authorization":'Bearer '+localStorage.getItem("token")
    91. // }
    92. // }
    93. )
    94. // 网络请求成功
    95. .then(res => {
    96. console.log("成功", res.data)
    97. this.feedlist = res.data.data; //评论信息
    98. // 更新分页信息
    99. this.pagnation = res.data.pagnation; //分页信息
    100. })
    101. // 网络请求失败
    102. .catch(err => {
    103. console.log("失败", err);
    104. alert(err.response.data.msg)
    105. })
    106. },
    107. logout() {
    108. // 清空用户信息与token
    109. this.userInfo = {};
    110. this.token = null;
    111. // 移除本地存储
    112. localStorage.removeItem("userInfo");
    113. localStorage.removeItem("token");
    114. },
    115. login() {
    116. // 实现登录
    117. this.$axios.post(
    118. "/api/login", //请求的地址
    119. this.user, //请求的数据
    120. )
    121. .then(res => {
    122. // 网络请求成功
    123. if (res.data.code === 200) {
    124. // res是响应的数据
    125. // 01 本地存用户信息,与token
    126. // stringify 把js对象转换为json字符串
    127. localStorage.setItem("userInfo", JSON.stringify(res.data.user))
    128. localStorage.setItem("token", res.data.token);
    129. // 02 更新userInfo与token
    130. this.userInfo = res.data.user;
    131. this.token = res.data.token;
    132. // 登录成功 获取评论
    133. this.getFeed()
    134. } else {
    135. alert(res.data.msg);
    136. }
    137. })
    138. .catch(err => {
    139. // 网络请求失败
    140. console.error(err)
    141. })
    142. }
    143. }
    144. }
    145. script>
    146. <style>
    147. .active {
    148. color: #FF7700
    149. }
    150. .pagnation span {
    151. padding: 15px;
    152. cursor: pointer;
    153. }
    154. style>

    mian.js代码

    1. import Vue from 'vue'
    2. import App from './App.vue'
    3. Vue.config.productionTip = false
    4. // 导入axios 没有./ (axios网络请求工具:1不依赖dom,2.前后端都可以用,3. 丰富拦截,扩展功能,4可封装,复用性强)
    5. import axios from 'axios';
    6. // 挂载到vue的全局(原型上),在每个组件都可以使用 ,prototype是固定的,$axios是自定义的
    7. Vue.prototype.$axios = axios;
    8. // 指定默认的请求域名
    9. axios.defaults.baseURL = "http://dida100.com:8888"
    10. // 给每个请求拦截一下,添加请求Token信息
    11. axios.interceptors.request.use(function(config){
    12. config.headers.Authorization = 'Bearer '+localStorage.getItem("token");
    13. return config;
    14. })
    15. // interceptors 拦截器
    16. // request 请求
    17. // config 配置
    18. // headers头信息
    19. // Authorization 权限
    20. // defaults 默认
    21. // baseURL 基础URL
    22. new Vue({
    23. render: h => h(App),
    24. }).$mount('#app')

  • 相关阅读:
    zookeeper、Dubbo
    tomcat常用配置详解和优化方法
    shell--while循环
    C++实现MD5算法程序设计与实现
    Mysql学习
    gazebo各种插件
    MySql学习笔记11——DBA命令介绍
    奶牛排序问题
    vue中,使用mock流程
    jQuery Ajax 设置请求头
  • 原文地址:https://blog.csdn.net/weixin_48494427/article/details/126045018