在Express服务器通过Apollo实现GraphQL时遇GET query missing错误
解决“GET query missing”错误的方案
错误原因分析
你遇到的“GET query missing”错误是因为/graphql端点的默认处理逻辑:
graphqlExpress中间件主要接收POST请求(查询内容放在请求体中)- 如果用GET请求访问
/graphql,必须在URL里显式带上query参数,服务器才能知道要执行什么查询。而你直接在浏览器地址栏输入http://localhost:7700/graphql时,浏览器发送的是不带任何查询参数的GET请求,所以触发了这个报错。
快速解决方法
看你的server.js代码,已经正确配置了GraphiQL(GraphQL可视化调试界面),你应该访问的是:
http://localhost:7700/graphiql
这个界面会自动帮你处理请求的发送逻辑,不需要手动拼接参数。你可以在左侧输入查询语句,点击运行就能看到结果,完全适配你现有配置。
(可选)通过GET请求直接访问/graphql的方法
如果确实需要用GET请求调用/graphql端点,你需要在URL中添加query参数。比如假设你的schema里有一个hello字段,就可以这样访问:
http://localhost:7700/graphql?query={hello}
把{hello}替换成你实际要执行的GraphQL查询语句即可。
确认你的配置正确性
你的server.js配置是完全没问题的:
server.use('/graphql', bodyParser.json(), graphqlExpress({ schema }))正确配置了GraphQL API端点server.use('/graphiql', graphiqlExpress({ endpointURL: '/graphql' }))正确关联了GraphiQL界面和API端点,所以访问/graphiql就能正常使用调试工具。
内容的提问来源于stack exchange,提问作者BugBuddy




