Magento 2.4.4 PWA Studio12.5.0 PDP页跳转404问题求助
故障基础信息
- 运行环境:Magento 2.4.4 + PWA Studio 12.5.0
- 故障表现:PLP分类页面可正常加载访问,PDP商品详情页访问时会自动重定向至404页面
核心报错日志
浏览器控制台日志
{"errors":[{"debugMessage":"Expected a value of type \"Int\" but received: PRODUCT","message":"Internal server error","extensions":{"category":"internal"},"locations":[{"line":1,"column":75}],"path":["route","type"]}],"data":{"route":{"relative_url":"url-product-1.html","redirect_code":0,"type":null,"uid":"MTA4ODA4OA==","__typename":"SimpleProduct"}}}
补充控制台报错细节:
{ errors: [{debugMessage: "Expected a value of type \"Int\" but received: PRODUCT",…}], data: { route: { relative_url: "epoxy-acrylic-resin-hazmat-item.html", redirect_code: 0, type: null, uid: "OTY2MTk=", __typename: "SimpleProduct" } } }
[GraphQL error]: Message: Internal server error, Location: [object Object], Path: route,type
Magento端debug日志
==> debug.log <== [2022-07-06T18:09:47.677613+00:00] report.ERROR: Expected a value of type "Int" but received: PRODUCT GraphQL (1:75) 1: query ResolveURL($url:String!){route(url:$url){relative_url redirect_code type ...on CmsPage{identifier __typename}...on ProductInterface{uid __typename}...on CategoryInterface{uid __typename}__typename}}
根因判定
报错触发点在GraphQL路由解析接口的type字段:原生Magento的route查询Schema中,type字段定义为Int类型枚举,对应规则为1=商品、2=分类、3=CMS页面,但当前环境中有第三方模块或自定义改写逻辑,直接返回了字符串PRODUCT作为type值,和Schema定义的Int类型不匹配,触发GraphQL类型校验错误,最终type字段返回null。PWA Studio的前端路由逻辑拿不到合法的type值判定页面类型,就会直接走404重定向逻辑。
PLP分类页能正常访问,是因为分类路由的解析逻辑没有被改写、返回值符合类型要求。
排查&修复步骤
- 第一步:定位冲突第三方模块
临时禁用所有非Magento官方的第三方模块,重点优先排查URL重写、GraphQL扩展、PWA适配类模块,执行以下命令刷新缓存:
清空PWA站点缓存后重试访问PDP,如果页面恢复正常,逐个开启之前禁用的模块,即可定位到改写了路由解析逻辑的冲突模块。bin/magento setup:upgrade bin/magento cache:clean - 第二步:排查自定义代码改写
如果禁用所有第三方模块后问题仍存在,检查app/code目录下的本地自定义代码,重点查找两类改写:- 通过
di.xml给Magento\UrlRewriteGraphQl\Model\Resolver\Route类绑定的拦截插件(plugin) - 通过preference方式重写了上述Route解析器类的自定义代码
核对代码中返回的type字段值,确认是否直接返回了PRODUCT/CATEGORY/CMS_PAGE字符串,没有做类型映射转换。
- 通过
- 第三步:修复返回值类型
定位到问题代码后,将type字段的返回值修改为原生要求的Int枚举值即可:- 商品页(PRODUCT)对应返回值:1
- 分类页(CATEGORY)对应返回值:2
- CMS页(CMS_PAGE)对应返回值:3
修改完成后执行以下命令清理缓存:
bin/magento cache:clean graphql_config full_page - 第四步:修复验证
直接调用ResolveURL接口查询商品URL,确认返回结果中type字段为对应整数、无类型报错,再访问PDP验证页面正常加载即可。
内容的提问来源于stack exchange,提问作者Sandeep Singh
相关产品推荐
相关产品推荐

