You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js从Shopify GraphQL响应提取sku和库存并排查undefined问题

问题1:提取sku和inventoryQuantity字段并导出为JSON文件

数据提取逻辑

每次获取到GraphQL接口返回的数据后,遍历嵌套的edges结构,提取目标字段存入统一的结果数组:

// 全局初始化存储结果的数组,放在do/while循环外部
const inventoryList = []

// 每次接口请求拿到data后执行提取逻辑
data.products.edges.forEach(productEdge => {
  const variantEdges = productEdge.node.variants.edges
  variantEdges.forEach(variantEdge => {
    const { sku, inventoryQuantity } = variantEdge.node
    // 若需要过滤空sku可加判断 if(sku) 再执行push
    inventoryList.push({ sku, inventoryQuantity })
  })
})

导出JSON文件

Node.js本地环境导出

使用内置fs模块写入文件:

const fs = require('fs')
// 全量数据提取完成后执行写入
fs.writeFileSync('./shopify_inventory.json', JSON.stringify(inventoryList, null, 2), 'utf-8')

接口返回供浏览器下载

设置对应响应头即可触发下载:

res.setHeader('Content-Type', 'application/json')
res.setHeader('Content-Disposition', 'attachment; filename=shopify_inventory.json')
res.send(JSON.stringify(inventoryList, null, 2))
问题2:返回结果开头出现undefined的原因

该问题由字符串拼接时引入未初始化变量导致,常见错误写法如下:

// 错误示例:只声明变量未赋初始值,默认值为undefined
let resContent
// 拼接时会把undefined拼在内容最前面
resContent += JSON.stringify(data)
res.send(resContent)

排查修复方案:

  • 将存储返回内容的变量初始值设为空字符串:let resContent = ''
  • 检查res.send传入的参数是否存在未定义的变量拼接逻辑,比如res.send(unknownVar + data)这类写法
  • 避免直接拼接JSON字符串,优先直接返回对象或使用JSON.stringify处理完整内容后再返回

内容的提问来源于stack exchange,提问作者Les Piper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:15:04