|
@@ -304,7 +304,7 @@ useEffect 只会在客户端执行,具体是在浏览器绘制后执行,服
|
|
|
---- rest api 错误处理
|
|
---- rest api 错误处理
|
|
|
---- graphql接口返回的错误有的有extensions字段,有的没有 具体可以查看nshop项目packages/Webkul/BagistoApi/src/Exception/下的异常类(一般看是否有getExtensions方法)
|
|
---- graphql接口返回的错误有的有extensions字段,有的没有 具体可以查看nshop项目packages/Webkul/BagistoApi/src/Exception/下的异常类(一般看是否有getExtensions方法)
|
|
|
---------骨架已搭好,待验证是否好用-------------
|
|
---------骨架已搭好,待验证是否好用-------------
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
10. 产品详情页代码优化 --- 已完成
|
|
10. 产品详情页代码优化 --- 已完成
|
|
|
11. 代码eslint检查修改 -- 已完成
|
|
11. 代码eslint检查修改 -- 已完成
|
|
|
12. 下单成功后需要重新创建购物车token -- 无需处理
|
|
12. 下单成功后需要重新创建购物车token -- 无需处理
|
|
@@ -352,10 +352,39 @@ useEffect 只会在客户端执行,具体是在浏览器绘制后执行,服
|
|
|
|
|
|
|
|
> 39,40 参考 https://chatgpt.com/share/6a4f0637-ad28-83ea-ad44-423740795054
|
|
> 39,40 参考 https://chatgpt.com/share/6a4f0637-ad28-83ea-ad44-423740795054
|
|
|
|
|
|
|
|
-## 接入klarna
|
|
|
|
|
-1. 从服务端获取client_token
|
|
|
|
|
-2. 需要加载js sdk
|
|
|
|
|
-3. 获取authorization_token
|
|
|
|
|
|
|
+## 关于请求接口和错误处理
|
|
|
|
|
+接口请求有四种情况:服务端组件里的graphql请求和restful请求;客户端组件里的graphql请求和restful请求。
|
|
|
|
|
+### 服务端组件里的graphql请求
|
|
|
|
|
+服务端组件里的graphql请求统一使用serverGraphqlFetch方法。
|
|
|
|
|
+
|
|
|
|
|
+对于php接口返回的错误可以通过serverGraphqlFetch方法返回的error字段解析,根据情况在页面上提示用户;
|
|
|
|
|
+
|
|
|
|
|
+对于不是php接口引起的错误,也可以说是serverGraphqlFetch方法本身引起的错误,会被抛出,然后被error.tsx或global-error.tsx捕获处理。
|
|
|
|
|
+### 服务端组件里的restful请求。
|
|
|
|
|
+服务端组件里的restful请求使用restApiFetch方法直接请求php后端接口,根据body字段的结构解析php接口返回的错误;
|
|
|
|
|
+
|
|
|
|
|
+对于不是php接口引起的错误,也可以说是restApiFetch方法本身引起的错误,会被抛出,然后被error.tsx或global-error.tsx捕获处理。
|
|
|
|
|
+### 客户端组件中的graphql请求。
|
|
|
|
|
+客户端组件中的graphql请求使用的是apollo client。
|
|
|
|
|
+
|
|
|
|
|
+apollo client的错误处理([文档](https://www.apollographql.com/docs/react/data/error-handling)):
|
|
|
|
|
+- try...catch 捕获;
|
|
|
|
|
+- 如果是像useQuery这种返回结果中有error字段的,中通过error属性处理;
|
|
|
|
|
+- 通过hook的onError回调处理;
|
|
|
|
|
+
|
|
|
|
|
+不管哪种方式都可以使用`src\lib\ApolloErrorHandler.ts`里的handleApolloBusinessError方法处理业务错误;handleErrorForErrorLink处理其他错误。
|
|
|
|
|
+
|
|
|
|
|
+### 客户端组件里的restful请求
|
|
|
|
|
+客户端组件里的restful请求使用`src\lib\restApiClient.ts`里的clientFetch方法发起。
|
|
|
|
|
+
|
|
|
|
|
+客户端发起的restful请求都是请求的next.js的route handler。
|
|
|
|
|
+在route handler里请求php的接口。
|
|
|
|
|
+
|
|
|
|
|
+clientFetch方法没有使用try...catch,不主动抛出异常。在实际调用clientFetch的地方使用try...catch捕获代码错误。在clientFetch的返回结果中解析接口返回的错误。
|
|
|
|
|
+
|
|
|
|
|
+> fetch方法不会抛出异常。接口的状态码即使是500,也不会抛出异常,也是resolve。所以try...catch包裹fetch不会捕获到状态码非2xx的错误(除非你手动抛出异常,具体可以看MDN文档)。
|
|
|
|
|
+
|
|
|
|
|
+> graphql请求的状态码只有200。所以即使php接口报错,状态码也是200。
|
|
|
|
|
|
|
|
|
|
|
|
|
## 关于购物车数据管理方案
|
|
## 关于购物车数据管理方案
|