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
相关产品推荐
相关产品推荐

