和服务端进行交互
#前端请求流程
在 vue-element-admin
中,一个完整的前端 UI 交互到服务端处理流程是这样的:
- UI 组件交互操作;
- 调用统一管理的 api service 请求函数;
- 使用封装的 request.js 发送请求;
- 获取服务端返回;
- 更新 data;
从上面的流程可以看出,为了方便管理维护,统一的请求处理都放在 @/src/api
文件夹中,并且一般按照 model 纬度进行拆分文件,如:
api/
login.js
article.js
remoteSearch.js
...
#request.js
其中,@/src/utils/request.js
是基于 axios 的封装,便于统一处理 POST,GET 等请求参数,请求头,以及错误提示信息等。具体可以参看 request.js。 它封装了全局 request拦截器
、response拦截器
、统一的错误处理
、统一做了超时处理
、baseURL设置等
。
#一个请求文章列表页的例子:
// api/article.js
import request from '../utils/request'; export function fetchList(query) { return request({ url: '/article/list', method: 'get', params: query }) } // views/example/list import { fetchList } from '@/api/article' export default { data() { list: null, listLoading: true }, methods: { fetchData() { this.listLoading = true fetchList().then(response => { this.list = response.data.items this.listLoading = false }) } } }
#设置多个 baseURL
我们可以通过环境变量设置多个baseURL
,从而请求不同的 api 地址。
# .env.development
VUE_APP_BASE_API = '/dev-api' #注入本地 api 的根路径
VUE_APP_BASE_API2 = '/dev-api2' #注入本地 api 的根路径
之后根据环境变量创建axios
实例,让它具有不同的baseURL
。 @/utils/request.js
// create an axios instance
const service = axios.create({ baseURL: process.env.BASE_API, // api 的 base_url timeout: 5000 // request timeout }) const service2 = axios.create({ baseURL: process.env.BASE_API2, // api 的 base_url timeout: 5000 // request timeout })
或者
export function fetchList(query) { return request({ url: '/article/list', method: 'get', params: query, baseURL: 'xxxx' // 直接通过覆盖的方式 }) }
http://www.kemaisii.cn
http://www.eternelle.cn
http://www.yajuxuan.cn
http://www.nodonkg.cn
http://www.yurunyipinn.cn
http://www.niudangjiaa.cn
http://www.feikeshoubiaoo.cn
http://www.yumengse.cn
http://www.parniss.cn
http://www.sensefadd.cn
http://www.youmaqi.cn
http://www.yinghengg.cn
http://www.xizuann.cn