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

Express中GraphQL查询单个User失败,返回全部用户问题求助

解决GraphQL查询单个用户却返回全部用户的问题

你的代码存在三个关键问题,导致查询返回所有用户:

1. Resolve函数参数接收错误

GraphQL的resolve函数第一个参数是父级数据(root),第二个才是传入的查询参数(args)。你直接把第一个参数当作userId,导致实际查询时where条件里的userId是undefined,TypeORM因此返回所有用户。

2. 返回类型定义错误

GET_USER的type设置为GraphQLList(UserType),这表示接口会返回用户数组,但你需要的是单个用户,应该改为UserType。

3. TypeORM查询方法选择不当

Users.find()返回的是符合条件的用户数组,获取单个用户应该使用findOneBy(TypeORM 0.3+版本)或findOne(旧版本),直接返回单个用户对象。


修正后的代码

import { GraphQLList, GraphQLID, GraphQLNonNull } from 'graphql';
import { UserType } from '../TypeDefs/User';
import { Users } from '../../Entities/Users';

export const GET_ALL_USERS = {
    type: new GraphQLList(UserType),
    resolve() {
        return Users.find();
    },
};

export const GET_USER = {
    // 改为单个用户类型
    type: UserType,
    args: {
        // 添加GraphQLNonNull确保参数必传,避免无参数时返回全部用户
        userId: { type: new GraphQLNonNull(GraphQLID) },
    },
    // 正确接收参数:第一个为root(用_忽略),第二个为args
    async resolve(_: any, args: any) {
        const { userId } = args;
        // TypeORM 0.3+版本用findOneBy查询单个用户
        const user = await Users.findOneBy({
            userId: userId,
        });

        return user;
    },
};

若使用TypeORM 0.2.x版本,替换查询逻辑为:

const user = await Users.findOne({
    where: {
        userId: userId,
    },
});

修正后查询结果

执行原GraphiQL查询语句,会返回预期的单个用户:

{
  "data": {
    "getUser": {
      "name": "Alicia",
      "email": "alicia@gmail.com",
      "userId": "2"
    }
  }
}

内容的提问来源于stack exchange,提问作者Jesús Iasenzaniro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:15:43