Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature Request] 可否为 umi request 导出一个创建 request 实例的接口,类似于 axios 的 axios.create() 或者 umi-request 的 extend #11305

Open
sherry007 opened this issue Jun 21, 2023 · 7 comments

Comments

@sherry007
Copy link

Background

由于项目复杂度的原因,现在项目里无法只用一种 request 的配置(就比如像文档里umi max 请求所说在 app.tsx 中导出一个统一的 request config), 所以需要多种 request 实例,比如有的需要加加密header,有的不需要,有的需要 prefix, 有的却不需要

Proposal

希望能够导出一个类似于原来 umi-request 中的 extend 或者 axios 的 create 函数方便用户自己创建所需要的 request 实例

@fz6m
Copy link
Member

fz6m commented Jun 21, 2023

不推荐用 umi request 了,现代请求数据流更推荐底层自己封装 axios / fetch ,顶层用 react-query

@sherry007
Copy link
Author

不推荐用 umi request 了,现代请求数据流更推荐底层自己封装 axios / fetch ,顶层用 react-query

可能我没讲清楚,我现在也是升级到 umi 4+ 和 antd 5+ , 然后修改原来使用 umi-request 部分的代码,然后发现我们现在使用的不管是 aHook 还是 axios 都只是导出了 request 、getrequestinstance, 但是没有一种可以自己去创建 request instance 的方法,就比如 axios 的 create() 方法,所以希望我们能不能也 export 个这种方法呢,感觉会很有用呢~

@xiaohuoni
Copy link
Member

自己用 axios 的 create 弄一个独立的不能满足吗?

@sherry007
Copy link
Author

自己用 axios 的 create 弄一个独立的不能满足吗?

当然可以呀,我只是觉得加上这个会让 umi 内置的 request/response 流程更完善,因为既然我们已经继承了 ahook 和 axios 的使用(加上我们自己的一部分属性重写,比如 requestInterceptors 等),再加一个导出实例的用法,不是锦上添花吗

@xiaohuoni
Copy link
Member

主要是你期望如何导出?或者说如何使用?

@sherry007
Copy link
Author

主要是你期望如何导出?或者说如何使用?

是这样的, 因为我还是想用 umi 的这一套 requet/response 流程的,因为直接传 errorConfig 以及 requestInterceptors/responseInterceptors 等比自己处理要方便;但是我又需要针对不同的接口调用做不同的配置,所以又要引入 axios 的 create,但是这样的话,我适配 umi requstConfig 的配置就不能传入到 create,因为他不认识 requestInterceptors 等这些东西;所以现在就是如果要创建实例,就只能完全使用 axios 库然后根据文档进行自定义配置;所以希望 umi 也能导出一个适配 umi 的 request 配置的 create 方法

import type { RequestConfig } from 'umi';
import axios from 'axios'
const requestConfig: RequestConfig = {
    baseURL: prefix,
    withCredentials: true,
    timeout: 3000,
    requestInterceptors: [
      [(url, options) => {return { url, options }}, (error) => {return Promise.reject(error)}]
    ]
    responseInterceptors: [...]
  };
// 如果我要用 axios 的 create 创建实例
axios.create(requestConfig) // interceptors 会不起作用, 可能还会报错
// 如果要让这个 create works, 只能创建 axios request config
const axiosRequestConfig: AxiosRequestConfig = {
    baseURL: prefix,
    withCredentials: true,
    timeout: 3000,
    ...
}
axios.create(axiosRequestConfig) // it will work

@lyndonliu89757
Copy link

特殊情况下,如何使用request,忽略全局拦截器?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants