Closed WangMingHua111 closed 8 months ago
@WangMingHua111 有没有响应的示例,是解决了什么问题,目前看出是做了什么修改
修改真实的响应类型为一个格式化type
@Manweill
产生的原因是网关层格式化了返回的数据,导致与真实类型不匹配(真实数据与swagger返回类型不匹配)
这种的话,我这边建议时候在 axios(或者其他的 request 请求客户端)的响应流过滤器里面直接处理就可以了。
即,axos 的话 是在axiosInstance.interceptors.response.use
中处理,例如网关层多包了一层给,那就在这里面做好返回数据的组装就好了,再把真实的数据返回.
例如你这里的话,那就是return {data:reponse.data.data}
你看下能不能足你需求
贴一个我对接的一个工程的例子
axiosInstance.interceptors.response.use(
(response) => {
const config: any = response.config
const data: ResponseBodyType = response.data
if (config) {
hideLoading()
}
if (data.success && data.code === 200) {
return response
} else if (response.data.code === 0) {
return response.data
} else {
const code = data.code
let errorMessage = ''
有道理,我这边在响应拦截器中, 添加格式化代码,提取网关格式化后的data。
我这边依然建议支持包装返回的类型,因为目前我有一个需求,将所有的可选参数包装为必填参数。或者有更优雅的方式实现
示例:
这种的话,我这边建议时候在 axios(或者其他的 request 请求客户端)的响应流过滤器里面直接处理就可以了。
即,axos 的话 是在
axiosInstance.interceptors.response.use
中处理,例如网关层多包了一层给,那就在这里面做好返回数据的组装就好了,再把真实的数据返回.例如你这里的话,那就是
return {data:reponse.data.data}
你看下能不能足你需求
能满足要求,似乎是应该这样处理
如果你这边不建议包装返回类型 我这边把这个提交关闭掉
有道理,我这边在响应拦截器中, 添加格式化代码,提取网关格式化后的data。
我这边依然建议支持包装返回的类型,因为目前我有一个需求,将所有的可选参数包装为必填参数。或者有更优雅的方式实现
示例:
应该是理解错误了,这个应该是 strictNullChecks
这个控制,会严格准守 swagger 的定义。并且你在这里如果进行了包装,会不够灵活,这个写法留给开发自己控制就可以,个人感觉。所以这个用户有点不合理。你可以先看看strictNullChecks
这个属性是否满足。
即在返回值里面自行 as Required<T>
到指定类型。
这仅能算一个一个业务需求,strictNullChecks 会导致整个项目中的代码不进行检查。在这里我希望是进行 api data 进行 bind 的时候不检查。
另外严格准守 swagger 的定义是有必要的,但由于项目组成员对ts不熟悉,导致了项目在构建过程中常出现大量的 type check 错误。所有做了一下业务向兼容。而在这种情况下 as Required
通过 responseTypeWrapper 参数我可以给项目打补丁,不然目前没有任何办法转换 返回的类型。
最近有点忘,忘记看了~我再重新评估一下
@WangMingHua111 这个pr还有合并的需求吗,如果有我这边重新打开一下
重新打开了
@Manweill
支持响应类型包装,解决 后端文档与接口返回不一致问题