文章目录

  • 前言
  • 一、接口配置,以axios为例
  • 1.安装axios,打开项目根目录,执行命令:
  • 2.设置axios请求配置文件,在src目录下新建request文件夹,然后新建http.js文件,在里边放入以下代码:
  • 3. 编写接口文件,在src目录下新建api文件夹,然后新增index.js文件,里边放入以下代码:
  • 4.配置本地跨域,在项目根目录里的vue.config.js里加入以下代码,如果没有这个文件新增一个
  • 5.使用方式如下,在Home.vue里加入以下代码:
  • 二、配置全局变量
  • 1.在项目根目录下新增.env文件,里边放入以下代码
  • 2.使用方式如下,在模板文件比如Home.vue里编写以下代码:
  • 结语

前言

工欲善其事必先利其器
本文所采用技术栈:vue3+vue-router4+vuex4+vant3,接上篇文章的准备工作,这次我们就接口配置,本地跨域处理,以及配置全局变量,如何去做,展开讨论。

一、接口配置,以axios为例

1.安装axios,打开项目根目录,执行命令:

npm install axios

2.设置axios请求配置文件,在src目录下新建request文件夹,然后新建http.js文件,在里边放入以下代码:

import axios from "axios";
import {Toast} from 'vant';
import router from '../router/index';

axios.defaults.timeout = 5000
//baseURL将自动加在接口url前面
axios.defaults.baseURL = '/api'
//请求headers里加入token,供接口做登录判断
axios.defaults.headers['token'] = localStorage.getItem('token') || ''
axios.interceptors.request.use((config) => {
    return config
}, (error) => {
    Toast.fail(error)
    return Promise.reject(error)
})
axios.interceptors.response.use((res) => {
    //code=1,直接返回数据
    if (res.data.code == 1) {
        return res.data
    } else if (res.data.code == 4011) {
        //这里是未登录逻辑
        router.push('/login');
    } else if (res.data.code == 0) {
        //这里是获取数据失败逻辑
        Toast(res.data.msg);
    } else {
        Toast(res.data.msg);
        return Promise.reject(res)
    }
    return res.data
}, (error) => {
    Toast(error)
    return Promise.reject(error);
})
export default axios

3. 编写接口文件,在src目录下新建api文件夹,然后新增index.js文件,里边放入以下代码:

import axios from '../request/http.js';
export function recommend(params) {
    return axios.post('/index/recommend', params);
}
export function recommendGoods(params) {
    return axios.post('/index/recommendGoods', params);
}

export function getLiveCategory() {
    return axios.post('/index/getLiveCategory');
}

export function getIndex() {
    return axios.post('/index/index');
}

4.配置本地跨域,在项目根目录里的vue.config.js里加入以下代码,如果没有这个文件新增一个

module.exports = {
    publicPath: './', // 根路径
    outputDir: 'dist', // 构建输出目录
    assetsDir: 'assets', // 静态资源目录(js,css,img,fonts)
    lintOnSave: false, // 是否开启eslint保存检测,有效值(true||false||error)
    devServer: {
        port: 80,
        proxy: {
            // 配置跨域因为我们给url加上了前缀/api,我们访问/index/getNewsList就当于访问了:http://localhost:81/api/index/getNewsList。
            // 在proxy中拦截了/api,并把/api及其前面的所有替换成了target中的内容,因此实际访问Url是http://vuedemoapi.com/api/index/getNewsList。
            '/api': {
                target: 'http://vuedemoapi.com/api',
                ws: true, // 是否跨域
                changeOrigin: true,
                secure: false,
                // 重写地址
                pathRewrite: {
                    '^/api': ''
                }
            }
        }
    }
}

5.使用方式如下,在Home.vue里加入以下代码:

<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue'
import {onMounted} from "vue"
import {getIndex} from "../api/index";

export default {
  name: 'Home',
  components: {
    HelloWorld
  },
  setup(){
    onMounted(()=>{
      getIndex().then((res)=>{
        console.log(res)
      })
    })
  }
}
</script>

二、配置全局变量

1.在项目根目录下新增.env文件,里边放入以下代码

VUE_APP_a=http://vuedemoapi.com
VUE_APP_domain=http://vuedemoapi.com
VUE_APP_TITLE=标题名字

变量必须以VUE_APP_开头,设置完成后,重启下脚手架

2.使用方式如下,在模板文件比如Home.vue里编写以下代码:

<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue'
import {onMounted} from "vue"

export default {
  name: 'Home',
  components: {
    HelloWorld
  },
  setup(){
    const domain=process.env.VUE_APP_a
    console.log(process.env.VUE_APP_domain)
    console.log(process.env.VUE_APP_TITLE)
    return {
      domain
    }
  }
}
</script>
<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js App"/>
    <div>{{domain}}</div>
  </div>
</template>

结语

以上代码片段可供参考,具体使用或者测试,请根据需求进行修改,对以上教程有异议,可在评论区评论。

最后,以上所有代码在我的开源仓库:https://github.com/maxzyt/vue3-mall-page,都可以找到,喜欢的点个star。