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

如何在graphql-tools的addMockFunctionsToSchema中返回GraphQL错误?

在graphql-tools的Mock解析器中模拟错误响应

要在addMockFunctionsToSchema里实现带错误逻辑的Mock解析器,你可以直接在自定义Mock函数里通过throw new Error()来抛出错误,GraphQL会自动将其格式化为标准的错误响应。下面是完整的可运行示例:

const { makeExecutableSchema, addMockFunctionsToSchema } = require('graphql-tools');
const casual = require('casual'); // 用于生成随机UUID,也可以用其他方式替代

// 1. 定义你的GraphQL Schema
const typeDefs = `
  type Token {
    value: ID!
  }
  type Mutation {
    getToken(email: String!, password: String!): Token
  }
`;

const schema = makeExecutableSchema({ typeDefs });

// 2. 编写带错误逻辑的自定义Mock
const mocks = {
  // 这里可以添加其他类型的默认Mock,比如Scalar类型的mock
  Mutation: () => ({
    getToken: (_, { password }) => {
      // 模拟密码校验逻辑
      if (password === 'password') {
        // 校验通过,返回模拟的Token
        return { value: casual.uuid };
      } else {
        // 校验失败,抛出错误
        throw new Error('Incorrect email or password');
      }
    },
  }),
};

// 3. 将Mock绑定到Schema上
addMockFunctionsToSchema({
  schema,
  mocks,
  // 如果需要保留某些类型的默认Mock行为,可以设置preserveResolvers: true
  // preserveResolvers: false, // 默认值
});

关键点说明:

  • 当调用getTokenMutation时,如果传入的password不是password,Mock解析器会直接抛出Error,这个错误会被GraphQL转换为包含message字段的标准错误响应。
  • 你可以根据业务需求扩展判断逻辑,比如添加邮箱格式校验、参数非空验证等。
  • 如果Schema里还有其他类型或字段,只需要在mocks对象中定义需要自定义的部分,未定义的字段会自动使用graphql-tools提供的默认Mock行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:46:04