如何在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
相关产品推荐
相关产品推荐

