From 9a5b6eb075da9e6658454b04910c2e1d5b10a390 Mon Sep 17 00:00:00 2001 From: bac-joker Date: Tue, 30 Mar 2021 21:35:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20request=20plugin=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=89=8D=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/reference/plugin/plugins/request.md | 9 +++++++++ packages/fes-plugin-request/src/index.js | 7 ++++++- packages/fes-plugin-request/src/template/request.js | 8 +++++++- packages/fes-template-h5/.fes.js | 2 +- packages/fes-template-h5/src/pages/index.vue | 2 +- 5 files changed, 24 insertions(+), 4 deletions(-) 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,