mirror of
https://gitee.com/baidu/amis.git
synced 2024-11-29 18:48:45 +08:00
Merge pull request #10249 from 2betop/feat-api
feat: api 发送适配器支持通过 api.query 来修改 query 参数 Close: #9813
This commit is contained in:
commit
cb15a17c9f
@ -589,11 +589,14 @@ amis 的 API 配置,如果无法配置出你想要的请求结构,那么可
|
||||
- **api**:当前请求的 api 对象,一般包含下面几个属性:
|
||||
- url:当前接口 Api 地址
|
||||
- method:当前请求的方式
|
||||
- data:请求的数据体
|
||||
- data:请求的数据体, 注意当请求方式为 `get` 时,`data` 在传入适配器时会被删除,请通过 query 读取,或者修改
|
||||
- query:请求的查询参数,所有请求参数都会被合并到 query 中,包含 data 参数和 url 参数
|
||||
- headers:请求的头部信息
|
||||
- context: 发送请求时的上下文数据
|
||||
- **context** 发送请求时的上下文数据
|
||||
|
||||
> 6.5.0 版本开始支持在发送适配中修改 query 参数,之前的版本只能修改 url 参数。
|
||||
|
||||
##### 字符串形式
|
||||
|
||||
如果在 JSON 文件中配置的话,`requestAdaptor`只支持字符串形式。
|
||||
|
@ -221,6 +221,7 @@ export interface ApiObject extends BaseApiObject {
|
||||
withCredentials?: boolean;
|
||||
cancelExecutor?: (cancel: Function) => void;
|
||||
};
|
||||
originUrl?: string; // 原始的 url 地址,记录将 data 拼接到 query 之前的地址
|
||||
jsonql?: any;
|
||||
graphql?: string;
|
||||
operationName?: string;
|
||||
|
@ -21,6 +21,8 @@ import isPlainObject from 'lodash/isPlainObject';
|
||||
import {debug, warning} from './debug';
|
||||
import {evaluate} from 'amis-formula';
|
||||
import {memoryParse} from './memoryParse';
|
||||
import cloneDeep from 'lodash/cloneDeep';
|
||||
import isEqual from 'lodash/isEqual';
|
||||
|
||||
const rSchema =
|
||||
/(?:^|raw\:)(get|post|put|delete|patch|options|head|jsonp|js):/i;
|
||||
@ -155,6 +157,7 @@ export function buildApi(
|
||||
ctx: Record<string, any>,
|
||||
merge: boolean
|
||||
) => {
|
||||
apiObject.originUrl = apiObject.originUrl || apiObject.url;
|
||||
const idx = apiObject.url.indexOf('?');
|
||||
if (~idx) {
|
||||
const params = (apiObject.query = {
|
||||
@ -482,7 +485,22 @@ export function wrapFetcher(
|
||||
|
||||
if (api.requestAdaptor) {
|
||||
debug('api', 'before requestAdaptor', api);
|
||||
const originQuery = api.query;
|
||||
const originQueryCopy = isPlainObject(api.query)
|
||||
? cloneDeep(api.query)
|
||||
: api.query;
|
||||
api = (await api.requestAdaptor(api, data)) || api;
|
||||
|
||||
if (
|
||||
api.query !== originQuery ||
|
||||
(isPlainObject(api.query) && !isEqual(api.query, originQueryCopy))
|
||||
) {
|
||||
// 如果 api.data 有变化,且是 get 请求,那么需要重新构建 url
|
||||
const idx = api.url.indexOf('?');
|
||||
api.url = `${~idx ? api.url.substring(0, idx) : api.url}?${qsstringify(
|
||||
api.query
|
||||
)}`;
|
||||
}
|
||||
debug('api', 'after requestAdaptor', api);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user