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

启动graphql-yoga服务器时出现PothosSchemaError: Ref Query未实现

解决Pothos GraphQL启动时"Ref Query has not been implemented"错误

问题场景

使用Pothos GraphQL构建GraphQL API,搭配Prisma ORM及@pothos/plugin-prisma插件,启动graphql-yoga服务器时触发如下错误:

file:///C:/Users/user/Documents/Projects/project1/node_modules/@pothos/core/src/config-store.ts:391
    }
     ^
PothosSchemaError: Ref Query has not been implemented
    at ConfigStore.onTypeConfig (file:///C:/Users/user/Documents/Projects/project1/node_modules/@pothos/core/src/config-store.ts:391:6)
    at cb (file:///C:/Users/user/Documents/Projects/project1/node_modules/@pothos/core/src/config-store.ts:474:3)
    at pendingActions (file:///C:/Users/user/Documents/Projects/project1/node_modules/@pothos/core/src/config-store.ts:446:32)
    at Array.forEach (<anonymous>)
    at ConfigStore.typeConfigs [as prepareForBuild] (file:///C:/Users/user/Documents/Projects/project1/node_modules/@pothos/core/src/config-store.ts:446:12)
    at BuildCache.builtTypes [as buildAll] (file:///C:/Users/user/Documents/Projects/project1/node_modules/@pothos/core/src/build-cache.ts:172:22)
    at SchemaBuilder.toSchema (file:///C:/Users/user/Documents/Projects/project1/node_modules/@pothos/core/src/builder.ts:597:11)
    at file:///C:/Users/user/Documents/Projects/project1/server/schema.ts:5:31
    at ModuleJob.run (node:internal/modules/esm/module_job:194:25)
[nodemon] app crashed - waiting for file changes before starting...

相关代码文件

builder.ts

import PrismaPlugin from "@pothos/plugin-prisma";
import type PrismaTypes from '@pothos/plugin-prisma/generated';
import { prisma } from "./db.js";
import SchemaBuilder from "@pothos/core";
import {DateResolver} from "graphql-scalars";

export const builder = new SchemaBuilder<{
    Scalars: {
        Date: { Input: Date; Output: Date };
    };
    PrismaTypes: PrismaTypes;
}>({
    plugins: [PrismaPlugin],
    prisma: {
        client: prisma,
    },
});

builder.addScalarType("Date",DateResolver,{});

schema.ts

import { builder } from "./builder.js";
import "./models/Job.js";
import "./models/JobCostCode.js";

export const schema = builder.toSchema({});

index.ts

import { createYoga } from 'graphql-yoga'
import { createServer } from 'node:http'
import { schema } from "./schema.js";

const yoga = createYoga({ schema });

const server = createServer(yoga);

server.listen(4000, () => {
    console.log(' 🚀 Server is running on http://localhost:4000');
});

问题原因

GraphQL规范要求Schema必须包含Query根类型,当前代码中未定义任何Query字段,导致Pothos无法生成有效的Query类型,触发该错误。

解决方案

需要显式定义Query类型并添加至少一个查询字段,有两种实现方式:

方式1:在schema.ts中全局定义Query类型

修改schema.ts,添加Query类型及字段:

import { builder } from "./builder.js";
import "./models/Job.js";
import "./models/JobCostCode.js";
import { prisma } from "./db.js";

// 创建Query根类型并添加字段
builder.queryType({
  fields: (t) => ({
    // 简单测试字段
    hello: t.string({
      resolve: () => "Hello World!",
    }),
    // 基于Prisma的查询字段
    allJobs: t.prismaField({
      type: ["Job"],
      resolve: (query) => prisma.job.findMany({ ...query }),
    }),
  }),
});

export const schema = builder.toSchema({});

方式2:在模型文件中添加查询字段

比如在Job.js中,通过builder.queryField添加针对Job的查询:

import { builder } from "../builder.js";

// 先定义Job类型
builder.prismaObject("Job", {
  fields: (t) => ({
    id: t.exposeID("id"),
    name: t.exposeString("name"),
    // 其他字段...
  }),
});

// 添加查询字段
builder.queryField("job", (t) =>
  t.prismaField({
    type: "Job",
    args: {
      id: t.arg.id({ required: true }),
    },
    resolve: (query, _, { id }) =>
      prisma.job.findUnique({
        ...query,
        where: { id },
      }),
  })
);

完成以上修改后,重新启动服务器即可解决该错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:05:30