vue项目axios接口连接集中封装

官网点击
安装
npm install --save axios
目录
vue项目axios接口连接集中封装_第1张图片
ajax.js

/*
ajax请求函数模块
返回值: promise对象(异步返回的数据是: response.data)
 */
import axios from 'axios'
import Qs from 'qs'
export default function ajax (url, data={}, type='GET') {

    return new Promise(function (resolve, reject) {
        // 执行异步ajax请求
        let promise
        if (type === 'GET') {
            // 准备url query参数数据
            let dataStr = '' //数据拼接字符串
            Object.keys(data).forEach(key => {
                dataStr += key + '=' + data[key] + '&'
            })
            if (dataStr !== '') {
                dataStr = dataStr.substring(0, dataStr.lastIndexOf('&'))
                url = url + '?' + dataStr
            }
            // 发送get请求
            promise = axios.get(url)
        } else {
            // 发送post请求
            promise = axios.post(url, Qs.stringify(data))
        }
        promise.then(function (response) {
            // 成功了调用resolve()
            resolve(response.data)
        }).catch(function (error) {
            //失败了调用reject()
            reject(error)
        })
    })
}

/*
const response = await ajax()
const result = response.data

const resule = await ajax()
 */

index.js


import ajax from './ajax'

const BASE_URL = '/api'

export const login = (data={},type='POST') => ajax(`${BASE_URL}/staff/login`,data,type)

vue.config.js配置跨域

// vue.config.js 配置说明
// 这里只列一部分,具体配置惨考文档啊
module.exports = {
    // baseUrl  type:{string} default:'/'
    // 将部署应用程序的基本URL
    // 将部署应用程序的基本URL。
    // 默认情况下,Vue CLI假设您的应用程序将部署在域的根目录下。
    // https://www.my-app.com/。如果应用程序部署在子路径上,则需要使用此选项指定子路径。例如,如果您的应用程序部署在https://www.foobar.com/my-app/,集baseUrl到'/my-app/'.

    publicPath: process.env.NODE_ENV === 'production'
        ? '/production-sub-path/'
        : '/',

    // outputDir: 在npm run build时 生成文件的目录 type:string, default:'dist'

    // outputDir: 'dist',

    // pages:{ type:Object,Default:undfind }
    /*
      构建多页面模式的应用程序.每个“页面”都应该有一个相应的JavaScript条目文件。该值应该是一
      个对象,其中键是条目的名称,而该值要么是指定其条目、模板和文件名的对象,要么是指定其条目
      的字符串,
      注意:请保证pages里配置的路径和文件名 在你的文档目录都存在 否则启动服务会报错的
    */
    pages: {
        login: {
            // page 的入口
            entry: './src/view/login/login.js',
            // 模板来源
            template: './src/view/login/login.html',
            // 在 dist/index.html 的输出
            filename: 'index.html',
            // 当使用 title 选项时,
            // template 中的 title 标签需要是 <%= htmlWebpackPlugin.options.title %>
            title: '登录'
        },
       /* main: {
            // page 的入口
            entry: './src/view/main/main.js',
            // 模板来源
            template: './src/view/main/main.html',
            // 在 dist/index.html 的输出
            filename: 'main.html',
            // 当使用 title 选项时,
            // template 中的 title 标签需要是 <%= htmlWebpackPlugin.options.title %>
            title: '主页'
        }*/
    },

    //   lintOnSave:{ type:Boolean default:true } 问你是否使用eslint
    lintOnSave: false,
    // productionSourceMap:{ type:Bollean,default:true } 生产源映射
    // 如果您不需要生产时的源映射,那么将此设置为false可以加速生产构建
    productionSourceMap: false,
    // devServer:{type:Object} 3个属性host,port,https
    // 它支持webPack-dev-server的所有选项

    devServer: {
        port: 8085, // 端口号
        host: 'localhost',
        https: false, // https:{type:Boolean}
        open: true, //配置自动启动浏览器
        // proxy: 'http://localhost:4000' // 配置跨域处理,只有一个代理
        proxy: {
            '/api': {
                target: 'http://localhost:4000',
                ws: true,
                changeOrigin: true,
                pathRewrite: {
                    '^/api': ''
                }
            },
            '/foo': {
                target: ''
            }
        },  // 配置多个代理
    }
}

在App.vue中使用

import {login} from "../../api";

methods:{
            async gologin(){
                let result = await login({username: this.username,password: this.password})
                if(result.code === 1){
                    alert('efa')
                }
            }
        }

你可能感兴趣的:(vue项目axios接口连接集中封装)