使用Shopify Node API修改资产时遭遇“Not Found”错误求助
解决Shopify Node API更新主题资产返回“Not Found”的问题
可能的原因及排查步骤
1. 应用权限不足
Shopify API修改主题资产需要write_themes权限,如果你的应用未申请该权限,或者店铺未完成授权,API可能会返回“Not Found”(Shopify有时会用404替代权限错误)。
- 操作:进入Shopify后台的应用设置页面,查看应用权限范围,确认包含
write_themes;若未包含,重新提交权限申请并让店铺管理员完成授权。
2. 会话(session)无效
确保使用的session对象包含有效的店铺域名、未过期的access token,且token权限覆盖write_themes。
- 操作:打印
session核心字段(如shop、accessToken)确认有效性;也可使用该token调用GET /admin/api/{version}/shop.json接口,测试是否能正常访问店铺数据。
3. 直接验证API端点(排除SDK问题)
绕过Node SDK,用HTTP工具直接调用Shopify API,确认问题是否出在SDK使用上:
curl -X PUT "https://{shop}.myshopify.com/admin/api/2024-04/themes/{theme_id}/assets.json" \ -H "X-Shopify-Access-Token: {access_token}" \ -H "Content-Type: application/json" \ -d '{ "asset": { "key": "layout/theme.liquid", "value": "{{ content_for_header }}\n{{ '\'' '\'' | script_tag }}\n${scripts}\n{{ '\'' '\'' | script_tag }}\n{{ content_for_layout }}" } }'
如果直接调用仍返回404,说明问题出在权限、主题ID或资产路径上;如果调用成功,则需排查Node SDK的使用逻辑。
4. 确认资产归属与存在性
虽然查询到了资产key,仍需确认该资产确实属于指定主题ID:
- 调用
GET /admin/api/{version}/themes/{theme_id}/assets.json?asset[key]=layout/theme.liquid,检查返回的资产信息是否完整,且主题ID与你使用的一致。
5. 代码细节优化
你的模板字符串存在多余缩进,虽不会直接导致404,但可能引发Liquid解析问题,建议调整代码:
const asset = new shopify.api.rest.Asset({session: session}); asset.theme_id = theme.id; asset.key = 'layout/theme.liquid'; asset.value = `{{ content_for_header }} {{ ' ' | script_tag }} ${scripts} {{ ' ' | script_tag }} {{ content_for_layout }}`; await asset.save({ update: true });
内容的提问来源于stack exchange,提问作者Key Lol
相关产品推荐
相关产品推荐

