如何在 GraphQL 中通过用户名获取用户?

How can I get user by userName in GraphQL?

我有这个 RootQuery:

const RootQuery = new GraphQLObjectType({
    name: 'RootQueryType',
    fields: {
        user: {
            type: UserType,
            args: { id: { type: GraphQLID } },
            resolve(parent, {id}) {
                return User.findById(id)
            }
        },

然后我将使用此查询获取用户:

{
  user(id:"5bd78614e71a37341cd2b647"){
    id
    userName
    password
    isAdmin
  }
}

它工作得很好'现在我不想通过他的 ID 获取用户, 我想通过他的用户名找到他,所以我使用了这个

const RootQuery = new GraphQLObjectType({
    name: 'RootQueryType',
    fields: {
        user: {
            type: UserType,
            args: { userName: { type: GraphQLString } },
            resolve(parent, {userName}) {
                console.log('userName',userName)
                return User.find({ userName })
            }
        },

这将带回所有属性为空的用户 请帮忙!!

首先,您应该使用 findOne 来只获得一个用户,find 会为您带来所有具有该名称的用户。如果你想要那个,也许你的 return 应该是 type: GraphQLList(UserType)。 如果它带来了所有属性,那可能是因为您在查询中要求它们。 此外,您的函数可能缺少 await User.find({ userName })async

   const RootQuery = new GraphQLObjectType({
        name: 'RootQueryType',
        fields: {
            user: {
                type: UserType,
                args: { userName: { type: GraphQLString } },
                resolve: async (parent, {userName}) => {
                    console.log('userName',userName)
                    const user = await User.findOne({ userName })
                    console.log('user',user);
                    return user;
                }
            },

检查这是否对您有帮助:)