前端框架 · plus-ui
请求流程
交互流程
一个完整的前端UI交互到服务器端处理流程是这样的:
- UI 组件交互操作;
- 调用统一管理的 api service 请求函数;
- 使用封装的
request.ts发送请求; - 获取服务端返回;
- 更新 data;
为了方便管理维护,统一的请求处理都放在@/src/api文件夹中,并且一般按照model维度进行拆分文件,如:
api/
system/
user/
index.ts
types.ts
role/
index.ts
types.ts
monitor/
operlog/
index.ts
types.ts
logininfor/
index.ts
types.ts
...提示
其中@/src/utils/request.ts是基于 axios 的封装,便于统一处理GET、POST等请求参数、请求头、错误提示和下载能力。
当前项目实际已经封装了:统一baseURL、Token 注入、语言头透传、重复提交拦截、接口加解密、登录过期重定向、二进制下载等逻辑。
当前项目默认配置
- 默认
baseURL读取自import.meta.env.VITE_APP_BASE_API - 默认请求头会附带
Authorization与clientid - 当前前端项目使用的是
Vite + TypeScript,不是旧版Vue CLI - 本地开发代理默认将
VITE_APP_BASE_API转发到http://localhost:8080 RuoYi-Vue-Plus与RuoYi-Cloud-Plus共用这一套请求封装,Cloud 版差异主要在于8080一般对应网关
请求示例
// @/api/system/user/index.ts
import request from '@/utils/request';
import { UserQuery, UserVO } from './types';
export const listUser = (query: UserQuery) => {
return request({
url: '/system/user/list',
method: 'get',
params: query
});
};
// @/views/system/user/index.vue
import api from '@/api/system/user';
const res = await api.listUser(proxy?.addDateRange(queryParams.value, dateRange.value));提示
如果有不同的baseURL,直接通过覆盖的方式,让它具有不同的baseURL。export const listUser = (query: UserQuery) => { return request({ url: '/system/user/list', method: 'get', params: query, baseURL: import.meta.env.VITE_APP_BASE_API }); };
常用请求头约定
isToken: false:本次请求不携带登录 TokenrepeatSubmit: false:关闭重复提交校验isEncrypt: 'true':对当前请求体启用前端加密
下载接口说明
项目内统一下载方法位于 @/src/utils/request.ts 的 download 方法,适合导出 Excel、压缩包等二进制文件。
如果后端返回的是业务错误而不是文件流,前端会自动转文本解析并提示错误信息。