淘先锋技术网

首页 1 2 3 4 5 6 7

问题描述:

在使用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’" 就行了,虽然有点怪!!!

参考连接:

openapi根据paths生成的api, 如何拼接 basePath在生成的Api前面呢