【问题标题】:How can I get user by userName in GraphQL?如何在 GraphQL 中通过用户名获取用户?
【发布时间】:2019-04-06 06:18:53
【问题描述】:

我有这个 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 })
            }
        },

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

【问题讨论】:

标签: graphql apollo react-apollo apollo-client apollo-server


【解决方案1】:

首先,您应该使用findOne 只获取一个用户,find 将为您带来具有该名称的所有用户。如果你愿意,也许你的回报应该是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;
                }
            },

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

【讨论】:

  • 不,我想通过用户名和密码获取一个用户数据
  • 使用 findOne 确实解决了我的类似问题。
猜你喜欢
  • 2022-06-14
  • 2021-08-03
  • 1970-01-01
  • 2016-10-03
  • 2018-02-21
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
  • 2012-01-17
相关资源
最近更新 更多