Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在GraphQL中通过用户名获取用户?_Graphql_Apollo_React Apollo_Apollo Client_Apollo Server - Fatal编程技术网

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

如何在GraphQL中通过用户名获取用户?,graphql,apollo,react-apollo,apollo-client,apollo-server,Graphql,Apollo,React Apollo,Apollo Client,Apollo Server,我有一个根查询: const RootQuery = new GraphQLObjectType({ name: 'RootQueryType', fields: { user: { type: UserType, args: { id: { type: GraphQLID } }, resolve(parent, {id}) { return User.fin

我有一个根查询:

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 })
            }
        },
这将返回所有属性均为null的用户
请帮忙

首先,您应该使用
findOne
仅获取一个用户,
find
将为您带来所有具有该名称的用户。如果你想这样做,也许你的返回应该是
类型:graphqlist(UserType)
。 如果它带来了所有属性,可能是因为您在查询中要求它们。 此外,您可能缺少函数上的
wait 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;
                }
            },

检查这是否有助于您:)

可能重复的
find
返回一个用户数组,而您需要的字段是单个用户对象。您需要使用
findOne
或返回数组中的第一个元素我不想通过用户名和密码获取一个用户数据使用findOne解决了我这边的类似问题。