1

GraphQL と Apollo を使用して REST クエリを解決しようとしています。

私の残りのデータは次のようになります

-> [Splits array] -> 各スプリットにはdonation_idがあります -> そのIDを使用して、別のrestエンドポイントから{donation}オブジェクトを取得したい

これが私のスキーマです

export const schema = [`

schema {
  query: RootQuery
}

type RootQuery {
  Splits(id: Int!): [Splits]
}

type Splits {
    amount_in_cents:Int
    donation_id:Int
    fund_id:Int
    id:Int
    memo:String
    donation(donation_id: Int): Donation
}

type Donation {
  amount_in_cents: Int
  bank_name: String
}
`];

そして、これが私のリゾルバーファイルです

import rp from 'request-promise';

const DTBaseURL = 'https://restendpointdomainhere.com/';
const getFromDT = (getQuery) => {
  const data = rp( DTBaseURL + getQuery, {
    'auth': {
      "user": Meteor.settings.endpoint.user,
      "pass": Meteor.settings.endpoint.pass,
    }
  } )
    .then( ( res ) => JSON.parse( res ) )
    .then((res) =>{
      return res;
    });
  return data;
};



export default resolveFunctions = {
  RootQuery: {
    Splits( root, args, context ){
      let newValue = [];
      const getQuery = 'funds/' + args.id + '/splits.json';

      const data = getFromDT(getQuery)
        .then( ( res ) => {
          res.forEach( function ( donationSplit ) {
            newValue.push( donationSplit.split );
          } );
          return newValue;
        } );

      return data;
    },
    donation( root, args, context ){
      console.log( args );
      const getQuery = 'donations/' + args.donation_id + '.json';

      const data = getFromDT(getQuery)
        .then((res) => {
          return res.donation;
        });
      return data;
    }
  }
};

@ /graphql でクエリを実行すると、このエラー メッセージが表示されます。

{
  "errors": [
    {
      "message": "Resolve function missing for \"Splits.donation\""
    }
  ]
}

ここで何か助けていただければ幸いです。

4

1 に答える 1

2

スキーマの作成にgraphql-toolsを使用しているようです。donationこのエラー メッセージは、フィールドにSplits解決関数が必要なため、スキーマを正常に構築できないことを示しています。resolve 関数を定義しましたが、それが属する場所ではRootQueryなく内部に配置しました。Splits

export default resolveFunctions = {
  RootQuery: {
    Splits( root, args, context ){
      let newValue = [];
      const getQuery = 'funds/' + args.id + '/splits.json';

      const data = getFromDT(getQuery)
        .then( ( res ) => {
          res.forEach( function ( donationSplit ) {
            newValue.push( donationSplit.split );
          } );
          return newValue;
        } );

      return data;
    },
  },
  Splits: { // <<---- you forgot this ------
    donation( root, args, context ){
      console.log( args );
      const getQuery = 'donations/' + args.donation_id + '.json';

      const data = getFromDT(getQuery)
        .then((res) => {
          return res.donation;
        });
      return data;
    }
  },
};
于 2016-09-02T19:23:49.540 に答える