Vue での Axios のカプセル化

Guanhui
リリース: 2020-05-20 11:03:22
転載
2169 人が閲覧しました

Vue での Axios のカプセル化

前のプロジェクトでは、リクエスト API とリクエスト メソッドがカプセル化されています。このカプセル化は、簡素化、バックエンドによって提供されるインターフェイスの管理の向上、リクエスト コードの再利用性、および簡単なコード変更。

axios のインストール

1

$ npm install axios

ログイン後にコピー

ディレクトリ ファイルの作成

src に http ディレクトリを作成

http Createディレクトリに http.js ユーザーを作成し、メソッドをリクエストします。

http ディレクトリに api.js を作成して、バックエンドが提供するインターフェイスを保存します。

http ディレクトリに axios.js ユーザーを作成して、 axios インターセプトを実行します。デバイス

ルート ディレクトリに vue.config.js を作成します。ユーザーはプロキシ設定を要求します。

次のコードです。

project/scr/http/http のコードです。 .js

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

import axios from 'axios';

export default {

    /**

     * get 请求

     * @param url 接口路由

     * @param auth 是否需要带登录信息

     * @returns {AxiosPromise<any>}

     */

    get(url, auth = false) {

        if (auth) {

            return axios.get(url, {headers: {Authorization: &#39;Your back-end user authenticates information&#39;}});

        } else {

            return axios.get(url);

        }

    },

    /**

     * post 请求

     *

     * @param url 接口路由

     * @param data 接口参数

     * @param auth 是否需要带登录信息

     * @returns {AxiosPromise<any>}

     */

    post(url, data, auth = false) {

        if (auth) {

            return axios.post(url, data, {headers: {Authorization: &#39;Your back-end user authenticates information&#39;}});

        } else {

            return axios.post(url, data);

        }

    },

    /**

     * put请求

     * @param url 接口路由

     * @param data 接口参数

     * @param auth 是否需要带登录信息

     * @returns {AxiosPromise<any>}

     */

    put(url, data, auth = false) {

        if (auth) {

            return axios.put(url, data, {headers: {Authorization: &#39;Your back-end user authenticates information&#39;}});

        } else {

            return axios.put(url, data);

        }

    },

    /**

     * 删除

     * @param url 接口路由

     * @param auth 是否需要带登录信息

     * @returns {AxiosPromise}

     */

    del(url, auth = false) {

        if (auth) {

            return axios.delete(url, {headers: {Authorization: &#39;Your back-end user authenticates information&#39;}});

        } else {

            return axios.delete(url);

        }

    },

    /**

     * 上传文件

     * @param url 接口路由

     * @param file 接口文件

     * @param auth 是否需要带登录信息

     */

    uploader(url, file, auth = false) {

        let param = new FormData();

        param.append(&#39;file&#39;, file)

        if (auth) {

            return axios.post(url, param, {headers: {Authorization: &#39;Your back-end user authenticates information&#39;}})

        } else {

            return axios.post(url, param)

        }

    },

}

ログイン後にコピー

project/scr/http/ にファイル API を作成し、管理を容易にするためにプロジェクト モジュールに従ってインターフェイス ファイルを作成できます。

Project/scr/http/api。 jsコード

1

2

3

4

5

6

7

8

9

10

11

12

13

import Goods from &#39;./api/goods.js&#39;;

export default {

    // 首页

    Index: {

        index: &#39;/index/index&#39;

    },

    // 个人中心

    Home: {

        UserInfo: &#39;/user/info&#39;

    },

    // 当然也可以用文件方式进行管理

    Goods: Goods

}

ログイン後にコピー

project/scr/http/api/goods.jsのコード

1

2

3

export default {

    GoodsShow: &#39;/goods/default&#39;

}

ログイン後にコピー

project/scr/http/axios.jsのコード

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

import axios from &#39;axios&#39;;

// 请求拦截

axios.interceptors.request.use(config => {

    // 1. 这个位置就请求前最后的配置

  // 2. 当然你也可以在这个位置 加入你的后端需要的用户授权信息

  return config

}, error => {

    return Promise.reject(error)

})

// 响应拦截

axios.interceptors.response.use(response => {

  // 请求成功

  // 1. 根据自己项目需求定制自己的拦截

  // 2. 然后返回数据

  return response;

}, error => {

    // 请求失败

      if (error && error.response) {

            switch (error.response.status) {

                case 400:

                    // 对400错误您的处理\

                break

                case 401:

                    // 对 401 错误进行处理

                break

                default:

                // 如果以上都不是的处理

                return Promise.reject(error);

          }

    }

})

ログイン後にコピー

上記は準備ができて。次のステップでは、project/scr/min.js にコードを追加します。

project/scr/min.js のコード

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

import Vue from &#39;vue&#39;;

import App from &#39;./App.vue&#39;;

import api from &#39;./http/api&#39;;

import http from &#39;./http/http&#39;;

// axios 拦截器

import &#39;./http/axios&#39;

// 对后端接口 进行全局注册

Vue.prototype.$api = api;

// 对请求方式 进行全局注册

Vue.prototype.$http = http;

那么接下来就是使用了

项目 /src/views/index/index.vue 中我们对他进行使用

<template>

     <div>

     </div>

 </template>

<script>

  export default {

        name: "Index",

        mounted() {

            this.handle()

        },

        methods: {

            handle(){

                // 当然如果你需要带登录信息去请求这个接口 可以在 路由后面跟上 true 或者 false 来决定是否在请求的时候带登录信息

                // 我们这样进行封装 就对一个 请求封装好了。

               this.$http.get(this.$api.Index.index,true).then((result) => {

               })

            }

        }

    }

</script>

<style scoped>

</style>

ログイン後にコピー

次のステップは、プロキシ構成を追加することです

project/vue .config.js コード

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

// 后端请求地址 注意[他会根据你环境的不同从而获取的 env 文件不同]

const target = process.env.APP_API_URL;

module.exports = {

  devServer: {

    // 所有的接口请求代理

  proxy: {

      &#39;/api&#39;: {

        target: target,

        changeOrigin: true,

        ws: true,

        pathRewrite: {

              &#39;^api&#39;: &#39;&#39;

        }

      }

    }

  }

}

ログイン後にコピー

推奨チュートリアル: "PHP チュートリアル " "JS チュートリアル "

以上がVue での Axios のカプセル化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
ノード Js + JS 入力 = document.getElementById
から 1970-01-01 08:00:00
0
0
0
js addClassが機能しない
から 1970-01-01 08:00:00
0
0
0
javascript - jsコードをPythonに変換
から 1970-01-01 08:00:00
0
0
0
jsファイルのコードが見つかりません
から 1970-01-01 08:00:00
0
0
0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート