From 55c3ab88746bb6358d9e5ecbc3f7f1bb8f2ef799 Mon Sep 17 00:00:00 2001 From: ozh Date: Tue, 15 Sep 2026 16:05:58 +0800 Subject: [PATCH] =?UTF-8?q?fix(http):=20=E7=BD=91=E7=BB=9C=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E9=80=8F=E4=BC=A0=E5=BE=AE=E4=BF=A1=20errMsg=EF=BC=8C?= =?UTF-8?q?=E6=9A=B4=E9=9C=B2=E7=9C=9F=E5=AE=9E=E5=A4=B1=E8=B4=A5=E5=8E=9F?= =?UTF-8?q?=E5=9B=A0=EF=BC=88=E5=9F=9F=E5=90=8D=E6=8B=A6=E6=88=AA/?= =?UTF-8?q?=E6=96=AD=E7=BD=91/=E8=B6=85=E6=97=B6=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/http/client.ts | 4 +++- tests/unit/http/client.spec.ts | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/http/client.ts b/src/http/client.ts index 0e69f56..4cdda1f 100644 --- a/src/http/client.ts +++ b/src/http/client.ts @@ -81,7 +81,9 @@ export async function request( header: headers }) } 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) { diff --git a/tests/unit/http/client.spec.ts b/tests/unit/http/client.spec.ts index 27bc9d4..059a3e7 100644 --- a/tests/unit/http/client.spec.ts +++ b/tests/unit/http/client.spec.ts @@ -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 () => { mockRequest.mockResolvedValue(okBody(null)) await request.get('/demo')