前端拦截器
基于前端网络请求拦截机制(如 Axios 拦截器),在请求发出前与响应返回后统一处理客户端逻辑,例如添加请求头、参数签名、响应解包、错误处理与令牌刷新等。
拦截器元素分层结构为 Meta(interceptors.Meta) → Type(interceptors.Http) → 实例,仅支持全代码方式创建。
快速开始
创建实例元素
目录结构
推荐前端拦截器元素目录结构
interceptors/
└── MyInterceptor/
├── index.ts
├── e.json
e.json 文件
前端拦截器 e.json 示例
{
"title": "自定义拦截器",
"type": "interceptors.Http",
"frontBundleEntry": "./index.ts",
"icon": "lanjieqi1",
"sort": 100
}
编写代码
需要导出reqInterceptor和respInterceptor两个方法。
index.ts(模板)
import type { InternalAxiosRequestConfig } from 'axios';
import type { HttpResponse } from 'jit';
// 请求拦截:在这里读取/设置请求头、参数等;最后返回 request
export const reqInterceptor = (request: InternalAxiosRequestConfig) => {
// 可自定义:读取已有头
// const auth = request.headers['Authorization'];
// 可自定义:设置自定义头或修改请求
// request.headers['X-Custom-Header'] = 'value';
// request.params = { ...(request.params || {}), traceId: '...' };
// request.data = request.data; // 也可在此序列化/变换
return request;
};
// 响应拦截:在这里统一处理响应数据、错误码、令牌刷新等;最后返回 response
export const respInterceptor = (response: HttpResponse & Record<string, any>) => {
// 可自定义:统一解包或数据转换
// const { data } = response;
// if (data && data.payload) {
// response.data = data.payload;
// }
// 可自定义:通用状态处理/错误抛出
// if (data && data.code !== 0) {
// // throw 或标准化错误
// }
return response;
};
方法
reqInterceptor
请求发出前触发。可在此读取与设置请求头、查询参数与请求体,进行序列化、埋点、签名等处理。函数需返回修改后的 request
对象。
respInterceptor
响应返回后触发。可在此统一解包、数据转换、错误码处理、令牌刷新等。函数需返回(或抛出)处理过的 response
对象。
高级特性
执行顺序
通过 e.json
中的 sort
字段控制拦截器执行顺序。
设置执行顺序
{
"title": "高优先级拦截器",
"type": "interceptors.Http",
"sort": 10
}
同时存在多个拦截器?
- 在请求发出前,按照
sort
升序执行reqInterceptor
- 在响应返回后,按照
sort
降序执行respInterceptor
平台内置拦截器
请求加签 interceptors.encryptor
JitNode校验信息获取 interceptors.JitNodeValid
接口异常信息获取 interceptors.exception