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

graphql-yoga执行posts查询返回Unexpected error如何解决?

问题定位

核心问题是createServer配置项位置写错:context是createServer的顶层配置,不属于schema配置对象的内部属性。
你当前代码把context: { db }写在了schema对象内部,框架不会读取这个位置的context配置,所有resolver的第三个参数拿不到你注入的db对象。执行posts查询时,Query.posts resolver里执行const { db } = context本质是对undefined解构,直接抛出JS运行错误。graphql-yoga默认关闭错误详情输出,只会返回通用的Unexpected error,控制台也不会打印具体错误栈,所以看起来毫无头绪。

修复代码

修改index.js的服务配置,把context移到和schema平级的位置:

import { createServer } from "@graphql-yoga/node";
import { readFileSync } from "node:fs";
import Comment from "./resolvers/Comment";
import Query from "./resolvers/Query";
import Post from "./resolvers/Post";
import User from "./resolvers/User";
import Mutation from "./resolvers/Mutation";
import db from "./db";

const typeDefs = readFileSync("./src/schema.graphql", "utf-8");

const server = createServer({
  schema: {
    typeDefs,
    resolvers: { Query, Mutation, Post, User, Comment },
  },
  // context移到顶层,和schema同级
  context: { db },
});

server.start();

改完重启服务,再执行posts查询就能正常返回数据。

后续排查指引(如果改完仍报错)

如果调整配置后问题依旧,按以下步骤排查:

  • 开启调试日志打印真实错误:在createServer配置中加入logging: 'debug',重启服务后控制台会输出完整错误栈,直接定位具体问题,不用靠猜
    const server = createServer({
      logging: 'debug',
      schema: {
        typeDefs,
        resolvers: { Query, Mutation, Post, User, Comment },
      },
      context: { db },
    });
    
  • 检查db.js导出逻辑:你贴的代码只给出了posts数组的定义,要确认db文件最终导出的对象包含posts、users、comments三个数组,不要漏导出或者导出结构不对
  • 检查resolver文件导入路径:确认./resolvers/Query、./resolvers/Post等导入路径和本地文件实际路径完全匹配,路径错误会导致导入的resolver值为undefined,查询时直接报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:12:17