使用Shopify Node.js API获取全部产品时触发TypeError错误求助
问题分析
报错TypeError: Cannot read properties of undefined (reading 'all')说明你代码里的shopify.rest.Product是undefined,无法调用其all方法。这大概率是因为你使用的@shopify/shopify-api版本(v8+)调整了REST资源的引用方式,不再通过shopify实例的rest属性挂载资源类。
解决方案
1. 确认依赖版本
查看你的package.json里@shopify/shopify-api的版本,如果是v8及以上,需要改用单独导入资源类的方式。
2. 修改代码引用方式
在文件顶部导入Product资源类:
import { Product } from '@shopify/shopify-api/rest/admin/2024-07';
注意:替换
2024-07为你实际使用的Shopify API版本号,比如2024-04、2023-10等。
然后修改获取产品的代码,直接调用Product.all():
// 替换原来的 shopify.rest.Product.all(...) const products = await Product.all({ session: callback.session, });
3. 旧版本兼容(如果使用v7及以下)
如果你坚持使用v7及以下版本,检查shopify实例的初始化是否完整,确保配置中包含正确的API版本:
import { Shopify } from '@shopify/shopify-api'; Shopify.Context.initialize({ API_KEY: 'your-api-key', API_SECRET_KEY: 'your-api-secret', SCOPES: ['read_products'], HOST_NAME: 'your-host-name', API_VERSION: '2023-10', // 必须指定正确的API版本 IS_EMBEDDED_APP: false, });
确认后,shopify.rest.Product应该能正常访问。
修正后的完整代码示例
import { Product } from '@shopify/shopify-api/rest/admin/2024-07'; app.get('/auth/callback', async (req: any, res: any) => { try { console.log('CALLBACK'); const callback = await shopify.auth.callback({ rawRequest: req, rawResponse: res, }); const response = await shopify.webhooks.register({ session: callback.session, }); // 改用导入的Product类调用all方法 const products = await Product.all({ session: callback.session, }); if (!response['PRODUCTS_CREATE'][0]?.success) { Sentry.captureException( `Failed to register PRODUCTS_CREATE webhook: ${response['PRODUCTS_CREATE'][0]?.result}`, ); } res.send('AUTH'); } catch(e) { console.log(e); Sentry.captureException(e); } });
内容的提问来源于stack exchange,提问作者reacter777
相关产品推荐
相关产品推荐

