【问题标题】:Webhook reponse data failing with 'map' of undefinedWebhook 响应数据因未定义的“地图”而失败
【发布时间】:2020-11-17 04:11:36
【问题描述】:

我正在尝试在购物车更新时从 Shopify Webhook 获取数据。它一直有效,直到我尝试映射我得到的响应。

显示错误:TypeError: Cannot read property 'map' of undefined.

但是,如果我 console.log() 数据,它会按应有的方式显示数组。但还是不能 map() 它。

async afterAuth(ctx) {
          ...
                const { shop, accessToken } = ctx.session;
                ctx.cookies.set('shopOrigin', shop, {
                    httpOnly: false,
                    secure: true,
                    sameSite: 'none'
                });
                await getSubscriptionUrl(ctx, accessToken, shop);

                const webhook = receiveWebhook({ secret: SHOPIFY_API_SECRET_KEY });

                router.post('/webhooks/carts/update', webhook, (ctx) => {

                    // This console log works
                    console.log(ctx.state.webhook);
                    
                    const cartProducts = ctx.state.webhook.payload.line_items.product_id;
                    
                    // This console log is not working = undefined
                    console.log('cartProducts: >>> ',cartProducts);

                    var productListIds = cartProducts.map(item => {
                        var product = item.product_id.toString();
                        return product
                    })
                    console.log('ARRAY OF PRODUCT IDS: ',productListIds);
                });
          ...

我希望“cartProducts”可用于 map()。 async/await 有帮助吗?如果是,我该如何实现?

提前致谢

【问题讨论】:

  • 你做了console.log(ctx)吗?如果你做了,结果是什么?
  • @dshung1997 谢谢,原来我试图访问空数据,因为 line_items 有一个项目数组(product_id)。因此,通过删除查询中的 .product_id 就可以了。喜欢下面的答案。

标签: javascript reactjs react-router webhooks shopify-app


【解决方案1】:

将 cartProducts 变量创建为 ctx.state.webhook.payload.line_items,因为只有个别项目具有product_id 属性。 在使用 map() 函数之前,您已尝试从数组中访问 product_id 属性。

async afterAuth(ctx) {
    ...
    const {
      shop,
      accessToken
    } = ctx.session;
    ctx.cookies.set('shopOrigin', shop, {
      httpOnly: false,
      secure: true,
      sameSite: 'none'
    });
    await getSubscriptionUrl(ctx, accessToken, shop);

    const webhook = receiveWebhook({
      secret: SHOPIFY_API_SECRET_KEY
    });

    router.post('/webhooks/carts/update', webhook, (ctx) => {

      // This console log works
      console.log(ctx.state.webhook);

      // Removed the 'product_id'
      const cartProducts = ctx.state.webhook.payload.line_items;

      console.log('cartProducts: >>> ', cartProducts);

      var productListIds = cartProducts.map(item => {
        var product = item.product_id.toString();
        return product
      })
      console.log('ARRAY OF PRODUCT IDS: ', productListIds);
    });
    ...

【讨论】:

    猜你喜欢
    • 2020-02-08
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2020-04-27
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    相关资源
    最近更新 更多