使用Gatsby启动服务器报错:无法查询ProductMarkdown的category字段
解决Gatsby中GraphQL报错:Cannot query field "category" on type "ProductMarkdown"
嘿,这个问题我之前在Gatsby项目里也踩过坑,咱们一步步来排查和解决:
1. 确认ProductMarkdown类型的字段定义
首先得检查你在gatsby-node.js或者类型定义文件里,有没有给ProductMarkdown类型声明category字段。很多时候是类型定义漏加了字段,或者字段名拼写/大小写不匹配。
比如在gatsby-node.js的createTypes里,应该这样定义:
exports.createTypes = ({ actions }) => { const { createTypes } = actions; const typeDefs = ` type ProductMarkdown implements Node { category: String! # 确保这里存在该字段,类型和需求匹配 } `; createTypes(typeDefs); };
2. 检查Markdown文件的Frontmatter
所有属于ProductMarkdown的Markdown文件,必须在文件开头的Frontmatter里包含category字段,否则Gatsby的GraphQL系统识别不到这个字段:
--- title: "Adjustable Weight Set" category: "Home Gym" # 这个字段必须存在,否则类型里不会生成category --- 这里是产品的详细描述...
3. 清理Gatsby缓存并重启服务
Gatsby的缓存机制有时候会导致类型变更没有生效,这时候需要强制清理缓存再重新启动:
gatsby clean && gatsby develop
这个操作会删掉.cache和public文件夹,让Gatsby重新构建所有类型和数据。
4. 检查GraphQL查询语句的拼写
最后确认你的查询语句里,字段名和类型定义完全一致(包括大小写)。比如不要把category写成Category:
❌ 错误示例:
query ProductList { allProductMarkdown { nodes { title Category # 这里大小写错误! } } }
✅ 正确示例:
query ProductList { allProductMarkdown { nodes { title category # 和类型定义的字段名完全一致 } } }
按照这几个步骤排查,应该能解决这个字段不存在的问题。
内容的提问来源于stack exchange,提问作者Taylor Austin
相关产品推荐
相关产品推荐

