• Vue: axios 请求封装及设置默认域名前缀 (for Vue 2.0)


    1. 实现效果

    以get方法向http://192.168.32.12:8080/users 发起请求、获取数据并进行处理

    this.apiGet('/users', {})
      .then((res) => {
        console.log(res)
      }, (err) => {
        console.log(err)
      })

    2. 实现步骤一之配置域名前缀

    2.1 安装axios

    cnpm install axios --save

    2.2 配置webpack.base.conf.js 文件

    引入

    const webpack = require('webpack')

    在项目根目录下的build 中可以找到webpack.base.conf.js 文件,对文件中的内容进行以下两项操作:

      在module.exports之前插入代码

    // define the different HOST between development and production environment
    var DEV_HOST = JSON.stringify('http://192.168.32.12:8080')
    var PUB_HOST = JSON.stringify('http://{部署服务器ip和端口}')

      在module.exports 中添加与entry、output、resolve等选项并列的plutins选项

    plugins: [
      new webpack.DefinePlugin({
        HOST: process.env.NODE_ENV === 'production' ? PUB_HOST : DEV_HOST
      })

    2.3 配置main.js 文件

    import axios from 'axios'
    axios.defaults.baseURL = HOST
    window.axios = axios
    window.HOST = HOST
     
    const bus = new Vue()
    window.bus = bus

    3. 实现步骤二之封装axios

    3.1 新建http.js 文件, static下边新建 js 文件夹

    const apiMethods = {
        methods: {
            apiGet(url, data) {
                return new Promise((resolve, reject) => {
                    axios.get(url, data).then((response) => {
                        resolve(response.data)
                    }, (response) => {
                        reject(response)
                        console.log(response)
                        bus.$message({
                            message: '请求超时,请检查网络',
                            type: 'warning'
                        })
                    })
                })
            },
            apiPost(url, data) {
                return new Promise((resolve, reject) => {
                    axios.post(url, data, {
                        headers: {
                            'Content-Type': 'application/json'
                        }
                    }).then((response) => {
                        resolve(response.data)
                    }).catch((response) => {
                        console.log('f', response)
                        resolve(response)
                        bus.$message({
                            message: '请求超时,请检查网络',
                            type: 'warning'
                        })
                    })
                })
            }
        }
    }
    
    export default apiMethods

    3.2 文件引入

    在需要发送ajax的请求文件中引入http.js

    import http from '../../../../static/js/http.js'

    并在该文件的export default 末尾添加选项

    mixins: [http]

    3.3 方法调用

    this.apiGet('/index.php/api/v1/goods/list', {
                        params: {
                            property_name: '秒杀'
                        }
                    })
                    .then((res) => {
                        if(res.code == 0){
                            this.hotListDate = res.result;
                        }else{
                            this.$message.error(res.message);
                        }
                    }, (err) => {
                        console.log(err)
                    });

    post

    this.apiPost('/index.php/api/v1/user/login', {
                        mobile      : this.form.phone,
                        password    : this.form.password
                    })
                    .then((res) => {
                        if(res.code == 0){
                           
                        }else{
                            this.$message.error(res.message);
                        }
                    }, (err) => {
                        console.log(err)
                    });
  • 相关阅读:
    ##JDBC
    《人月神话》阅读笔记(三)
    《人月神话》阅读笔记(二)
    《人月神话》阅读笔记(一)
    记账小软件开发(网页版)(四)
    记账小软件开发(网页版)(三)
    记账小软件开发(网页版)(二)
    记账小软件开发(网页版)(一)
    课程信息管理系统
    Java课程作业之动手动脑(六)
  • 原文地址:https://www.cnblogs.com/haonanZhang/p/9512911.html
Copyright © 2020-2023  润新知