fix(http): 网络异常透传微信 errMsg,暴露真实失败原因(域名拦截/断网/超时)

This commit is contained in:
ozh 2026-09-15 16:05:58 +08:00
parent bb9f869a3e
commit 55c3ab8874
2 changed files with 19 additions and 1 deletions

View File

@ -81,7 +81,9 @@ export async function request<T>(
header: headers header: headers
}) })
} catch (e) { } catch (e) {
throw new ApiError(e instanceof Error ? e.message : '网络异常') // Taro 网络 API reject 的是 { errMsg } 形状对象而非 Error 实例,需兼容读取以便透出真实原因
const raw = e instanceof Error ? e.message : (e as { errMsg?: string })?.errMsg
throw new ApiError(raw || '网络异常')
} }
if (res.statusCode !== 200) { if (res.statusCode !== 200) {

View File

@ -87,6 +87,22 @@ describe('client envelope 解析', () => {
}) })
}) })
it('Taro.request reject 的是 { errMsg } 形状对象时透传 errMsg(微信真实失败形态)', async () => {
mockRequest.mockRejectedValue({ errMsg: 'request:fail url not in domain list' })
await expect(request.get('/demo')).rejects.toMatchObject({
name: 'ApiError',
message: 'request:fail url not in domain list'
})
})
it('reject 无任何可读信息时兜底「网络异常」', async () => {
mockRequest.mockRejectedValue(undefined)
await expect(request.get('/demo')).rejects.toMatchObject({
name: 'ApiError',
message: '网络异常'
})
})
it('需鉴权请求注入 Bearer token 头', async () => { it('需鉴权请求注入 Bearer token 头', async () => {
mockRequest.mockResolvedValue(okBody(null)) mockRequest.mockResolvedValue(okBody(null))
await request.get('/demo') await request.get('/demo')