diff --git a/docs/zh/reference/plugin/plugins/request.md b/docs/zh/reference/plugin/plugins/request.md index ddcc5c17..08c23e32 100644 --- a/docs/zh/reference/plugin/plugins/request.md +++ b/docs/zh/reference/plugin/plugins/request.md @@ -20,6 +20,7 @@ export default { request: { dataField: 'result', + base: '', }, } ``` @@ -32,6 +33,14 @@ export default { `dataField` 对应接口统一格式中的数据字段,比如接口如果统一的规范是 `{ success: boolean, result: any}` ,那么就不需要配置,这样你通过 `useRequest` 消费的时候会生成一个默认的 `formatResult`,直接返回 `result` 中的数据,方便使用。如果你的后端接口不符合这个规范,可以自行配置 `dataField`。配置为 `''`(空字符串)的时候不做处理。 + +#### base + +- 类型: `string` +- 默认值: `''` +- 详情: + + `base` 接口前缀。 ### 运行时配置 在 `app.js` 中进行运行时配置。 diff --git a/packages/fes-plugin-request/src/index.js b/packages/fes-plugin-request/src/index.js index 25b0c338..727fb806 100644 --- a/packages/fes-plugin-request/src/index.js +++ b/packages/fes-plugin-request/src/index.js @@ -12,10 +12,14 @@ export default (api) => { dataField: joi .string() .pattern(/^[a-zA-Z]*$/) + .allow(''), + base: joi + .string() .allow('') }); }, default: { + base: '', dataField: '' } } @@ -26,11 +30,12 @@ export default (api) => { const requestTemplate = readFileSync(join(__dirname, 'template', 'request.js'), 'utf-8'); api.onGenerateFiles(() => { // 文件写出 - const { dataField = '' } = api.config.request; + const { dataField = '', base = '' } = api.config.request; api.writeTmpFile({ path: absoluteFilePath, content: requestTemplate .replace('REPLACE_DATA_FIELD', JSON.stringify(dataField)) + .replace('REPLACE_BASE', base || '') }); }); diff --git a/packages/fes-plugin-request/src/template/request.js b/packages/fes-plugin-request/src/template/request.js index 8c3d56d4..5360302d 100644 --- a/packages/fes-plugin-request/src/template/request.js +++ b/packages/fes-plugin-request/src/template/request.js @@ -87,9 +87,15 @@ function getRequestInstance() { }; } +function handleApiPathBase(url, options = {}) { + if (options.base) { + return `${options.base}${url}`; + } + return `REPLACE_BASE${url}`; +} function userConfigHandler(url, data, options = {}) { - options.url = url; + options.url = handleApiPathBase(url, options); options.method = (options.method || 'post').toUpperCase(); if (checkHttpRequestHasBody(options.method)) { options.data = data; diff --git a/packages/fes-template-h5/.fes.js b/packages/fes-template-h5/.fes.js index 9ce624cb..beb486d8 100644 --- a/packages/fes-template-h5/.fes.js +++ b/packages/fes-template-h5/.fes.js @@ -7,9 +7,9 @@ export default { // __VUE_OPTIONS_API__: true, // __VUE_PROD_DEVTOOLS__: false }, - base: '/#/app/#', publicPath: '/', request: { + base: '/ras-mas', dataField: '' }, html: { diff --git a/packages/fes-template-h5/src/pages/index.vue b/packages/fes-template-h5/src/pages/index.vue index 27477871..185c11bb 100644 --- a/packages/fes-template-h5/src/pages/index.vue +++ b/packages/fes-template-h5/src/pages/index.vue @@ -28,7 +28,7 @@ export default { const clickIcon = () => { console.log('click Icon'); }; - const { loading, data } = useRequest('api'); + const { loading, data } = useRequest('/api'); return { loading, data,