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

GraphQL创建用户Mutation配置速率限制报错如何解决?

问题根因

你写的createUser Resolver没有声明接收GraphQL默认传入的四个标准参数,导致调用速率限制器时传入的parent、context、info三个变量全是未定义,直接触发运行错误。
标准GraphQL Resolver的参数顺序固定为(parent, args, context, info),你的代码里只处理了前两个参数,且直接解构了args里的createInput,没有保留剩余三个参数的引用。

修复方案

把createUser的参数声明改成标准格式,拿到全部四个参数后再做后续逻辑即可,修改后代码如下:

Mutation: {
        async createUser(parent, args, context, info) {
            // 先做速率限制校验
            const errorMessage = await rateLimiter(
                { parent, args, context, info },
                { max: 1, window: '3s' }
            );
            if (errorMessage) throw new Error(errorMessage);
            
            // 再解构入参
            const {
                createInput: {
                    name,
                    email,
                    role,
                    password,
                    confirmPassword
                }
            } = args;

            // 后续原有逻辑不变
            const { valid, errors } = validateCreateInput(name, email, role, password, confirmPassword);

            if (!valid) {
                throw new UserInputError('Errors', { errors })
            }

            const duplicateEmail = await User.findOne({ email });

            if (duplicateEmail) {
                throw new UserInputError('Email is already used', {
                    errors: {
                        email: 'Email is already used'
                    }
                })
            }

            password = await bcrypt.hash(password, 12);

            const newUser = new User({
                name,
                email,
                role,
                password,
                createdAt: new Date().toISOString()
            })

            const res = await newUser.save();

            return {
                ...res._doc,
                id: res._id
            }
        }
    }

校验说明

修改完成后可以先测试3秒内连续调用两次createUser Mutation,确认会触发速率限制报错,且正常调用不会再出现参数未定义的问题即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:48:00