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)
                });

原文地址:https://www.cnblogs.com/haonanZhang/p/9512911.html

时间: 2024-11-07 06:51:34

Vue: axios 请求封装及设置默认域名前缀 (for Vue 2.0)的相关文章

vue axios请求/响应拦截器

// main.js中配置 // 引入 axios import Axios from 'axios' // 这时候如果在其它的组件中,是无法使用 axios 命令的. // 但如果将 axios 改写为 Vue 的原型属性,就能解决这个问题 Vue.prototype.$axios = Axios // 引用mint-ui import MintUI from 'mint-ui' import 'mint-ui/lib/style.css' Vue.use(MintUI) // 一次性注册多个

vue axios请求频繁时取消上一次请求

一.前言 在项目中经常有一些场景会连续发送多个请求,而异步会导致最后得到的结果不是我们想要的,并且对性能也有非常大的影响.例如一个搜索框,每输入一个字符都要发送一次请求,但输入过快的时候其实前面的请求并没有必要真的发送出去,这时候就需要在发送新请求的时候直接取消上一次请求.vue axios拦截器介绍 原文地址:https://www.cnblogs.com/lalalagq/p/9939542.html 二.代码 <script> import axios from 'axios' impo

封装 axios 请求 并 return 结果

axios请求是异步请求,我遇到的情况是多个请求用同一个地址,通过传参不同控制想要的返回结果,因此,这时想将axios请求封装为一个函数,通过return将返回结果传出来. 但是如何实现呢,我才用的方法如下: queryData(参数..){ var datas={ 定义请求参数.. } return axios.post(this.url,datas).then(response=>response.data.result).catch(error => error) }, 这里的返回值为p

vue项目常用之二:封装 axios 请求模块

/** * 封装 axios 请求模块 */ import axios from 'axios' import jsonBig from 'json-bigint' import store from '@/store' import router from '@/router' import { Notify } from 'vant' // axios.create 方法:复制一个 axios const request = axios.create({ baseURL: 'http://t

vue Axios 封装与配置项

import axios from "axios"; import qs from "qs"; import { Message } from "element-ui"; import router from "../router"; const Axios = axios.create({ baseURL: "/", // 因为我本地做了反向代理 timeout: 10000, responseType:

Vue数据请求 axios vs fetch

Vue数据请求 数据请求在前端开发中的使用有两种形式 使用原生javascript提供的数据请求 ajax( 四部曲,一般需要我们结合Promise去封装,使用不是很便利,但是效率很高 ) fetch( 本身结合了Promise,并且已经做好了封装,可以直接使用 ) 使用格式: 使用别人封装好的第三方库目前最流行的,使用率最高的是 axios vue中我们最常使用的 vue 1.x 的版本提供了一个封装库 vue-resource , 但是到了vue 2.x版本之后,这个就弃用了vue-reso

(二)vue.js中axios的封装(参考)

基于前文所述,axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它有很多优秀的特性,例如拦截请求和响应.取消请求.转换json.客户端防御XSRF等. 如果还对axios不了解的,可以移步axios文档,axios使用说明. 安装 cnpm install axios --save 在项目src下新建request/http.js文件,并引入axios /** * axios封装:请求拦截,响应拦截,错误编码 */ import axios from 'ax

vue axios封装以及API统一管理

在vue项目中,每次和后台交互的时候,经常用到的就是axios请求数据,它是基于promise的http库,可运行在浏览器端和node.js中.当项目越来越大的时候,接口的请求也会越来越多,怎么去管理这些接口?多人合作怎么处理?只有合理的规划,才能方便往后的维护以及修改, 安装 安装axios依赖包 cnpm install axios --save 引入 一般会我会在项目src中新建一个untils目录,其中base用于管理接口域名,http处理请求拦截和响应拦截,user.js负责接口文件(

聊聊 Vue 中 axios 的封装

聊聊 Vue 中 axios 的封装 axios 是 Vue 官方推荐的一个 HTTP 库,用 axios 官方简介来介绍它,就是: Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 作为一个优秀的 HTTP 库,axios 打败了曾经由 Vue 官方团队维护的 vue-resource,获得了 Vue 作者尤小右的大力推荐,成为了 Vue 项目中 HTTP 库的最佳选择. 虽然,axios 是个优秀的 HTTP 库,但是,直接在项目中使用并不是那