web-dev-qa-db-ja.com

GraphQL「null不可のためにnullを返すことはできません」

最初のgraphQLサーバーを作成しようとして、これまでに書いたものをここに示します。

https://Gist.github.com/tharakabimal/7f2947e805e69f67af2b633268db0406

ユーザー名でユーザーをフィルタリングしようとすると、GraphQLに次のエラーが表示されます。

GraphQLのエラー

エラーはUserQueriesQL.jsのusersフィールドで発生します。

Resolve関数で引数を渡す方法に何か問題はありますか?

user: {
type: UserType,
args: { 
  username: {
    name: 'username',
    type: new GraphQLNonNull(GraphQLString)
  }
},
resolve: function(parentValue, args) {
  return User.find( args ).exec();
}
10
King Julian

私はGraphQLの初心者なので、この問題に出くわしました。各ファイルを個別に調べた後、resolversにインポートするのを忘れていることがわかりました

import User from './User';
**import Post from './Post';**

const resolvers = [User, **Posts**];

たぶんこれが役立つでしょう!

2
Neville Dabreo
_user: {
type: UserType,
args: { 
  username: { type: new GraphQLNonNull(GraphQLString) }
},
resolve: function(parentValue, args) {
  return User.find( args ).exec(); // User.find({username: 'some name'}).exec(); 
// will work as matches your mongoose schema
}
_

以前は、argsで、ネストされたオブジェクトobjectを持つusernameを提供しているため、

_args: {  // this won't match your mongoose schema field as it's nested object
  username: {
    name: 'username',
    type: new GraphQLNonNull(GraphQLString)
  }
}
_

したがって、ユーザーが引数を照会して提供すると、引数は_{ username: { name: 'abcd' } }_になります

_// args = {username: {name: 'abcd'}}
_

resolve()User.find({username: {name: 'abcd'}}).exec();を実行しています

_/* searching for username{} object, but
your mongoose schema is username: String */
_

データベースフィールドとは一致しません。常に空の配列_[]_が返され、GraphQLフィールドタイプもGraphQLNonNullであるため一致しません。

Gistを表示した後、問題はrootqueryにあります

問題はrootqueryにあります

_let RootQuery = new GraphQLObjectType({
    name: 'RootQueryType',
    fields: () => ({
        users: { type:UserQueries.users, resolve: UserQueries.users }
        user: { type: UserQueries.user, resolve: UserQueries.user }
    })
});
_
1
p0k8_