问题描述:
在使用umi + openapi 创建项目的时候,每个restAPI 的前缀都是一样的/api/v1,就不想在每个定义的path 里面都写上同样的basePath, 看到@umijs/plugin-openapi 配置的时候有一个apiPrefix 的属性,所以配置成了string 类型,值为‘/api/v1’, 但是生成出来的路径变成了如下:
import { request } from 'umi';
export async function getUsers(options?: { [key: string]: any }) {
return request<API.User[]>(`${/api/v1}/users`, {
method: 'GET',
...(options || {}),
});
}
并不是期望的/api/v1/users
, 去找了插件的源代码,关键代码如下:
const getPrefixPath = () => {
if (!this.config.apiPrefix) {
return formattedPath;
}
// 静态 apiPrefix
const prefix = typeof this.config.apiPrefix === 'function'
? `${this.config.apiPrefix({
path: formattedPath,
method: newApi.method,
namespace: tag,
functionName,
})}`.trim()
: this.config.apiPrefix.trim();
if (!prefix) {
return formattedPath;
}
if (prefix.startsWith("'") || prefix.startsWith('"') || prefix.startsWith('`')) {
const finalPrefix = prefix.slice(1, prefix.length - 1);
if (formattedPath.startsWith(finalPrefix) ||
formattedPath.startsWith(`/${finalPrefix}`)) {
return formattedPath;
}
return `${finalPrefix}${formattedPath}`;
}
// prefix 变量
return `$\{${prefix}}${formattedPath}`;
};
所以apiPrefix 配置成"‘/api/v1’" 就行了,虽然有点怪!!!