使用graphql-yoga查询users时遇TypeError错误求助
解决graphql-yoga查询users时的TypeError问题
核心排查方向:Context注入与Resolver使用
1. 确认Yoga实例的Context配置是否正确
创建Yoga实例时,必须将你的JSON数据挂载到context对象中,确保resolver能访问到:
import { createYoga } from 'graphql-yoga' import { createServer } from 'http' import usersData from './myJsonFile.json' import schema from './schema.js' const yoga = createYoga({ schema, // 配置context,将JSON数据挂载到users属性上 context: () => ({ users: usersData }) }) const server = createServer(yoga) server.listen(4000, () => console.log('Server running on http://localhost:4000/graphql'))
如果使用CommonJS规范,导入方式改为const usersData = require('./myJsonFile.json')。
2. 检查Resolver中Context的调用是否正确
在query.js的users resolver里,要正确从context参数获取数据,避免拼写错误或参数顺序错误:
// query.js export default { users: (parent, args, context) => { // 临时打印context验证是否存在users属性 console.log('当前Context:', context) return context.users } }
注意resolver的参数顺序是parent, args, context(第四个参数为info),不要搞混顺序导致context未正确获取。
3. 验证Resolver的组合是否正确
确保resolvers/index.js正确导出组合后的resolvers对象:
// resolvers/index.js import Query from './query.js' export default { Query }
这里要注意Query的大小写必须和schema中定义的根查询类型一致(schema里是type Query { ... },所以resolvers里必须是大写的Query)。
4. 确认JSON数据的结构符合预期
虽然你已经确认JSON能正常打印,但要确保数据结构匹配resolver的返回要求:如果JSON是{ "users": [...] }格式,那挂载到context时应该写users: usersData.users,而非直接users: usersData。
内容的提问来源于stack exchange,提问作者mertokumusoglu
相关产品推荐
相关产品推荐

