如何在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解决了我这边的类似问题。