2017-02-23 5 views
0

私は2つのリソースを持っています:PurchaseCategoryここで購入はカテゴリに属し、カテゴリには多くの購入があります。私は、このかなり確信しているタイプ循環参照の問題graphql

Schema must contain unique named types but contains multiple types named "Category". 

:私のタイプを設定するとき、私は次のエラーを取得する

query { 
    purchases { 
     description, 
     amount, 
     category { 
      name 
     } 
    } 
} 

または

query { 
    categories { 
     name, 
     purchases { 
      description, 
      amount 
     } 
    } 
} 

:私は、次のようなクエリを実行できるようにしようとしています循環参照問題ですが、私は他の答えが示唆しているように私はサンクを使用しました:

// Category/type.js 
const {GraphQLObjectType, GraphQLInt, GraphQLString, GraphQLList} = require('graphql/type'); 
const {purchaseType} = require('../Purchase'); 

const categoryType = new GraphQLObjectType({ 
    name: 'Category', 
    description: 'a purchasing category', 
    fields:() => ({ 
     id: { 
      type: GraphQLInt 
     }, 
     name: { 
      type: GraphQLString 
     }, 
     purchases: { 
      type: new GraphQLList(purchaseType), 
      resolve (category) { 
       return category.getPurchases(); 
      } 
     } 
    }) 
}); 

module.exports = categoryType; 

// Category/index.js 
const categoryType = require('./type'); 
const categoryQuery = require('./query'); 

module.exports = { 
    categoryType, 
    categoryQuery 
}; 

// Purchase/type.js 
const {GraphQLObjectType, GraphQLInt, GraphQLString, GraphQLFloat} = require('graphql/type'); 
const {categoryType} = require('../Category'); 

const purchaseType = new GraphQLObjectType({ 
    name: 'Purchase', 
    description: 'a specific purchase', 
    fields:() => ({ 
     id: { 
      type: GraphQLInt, 
     }, 
     description: { 
      type: GraphQLString, 
     }, 
     amount: { 
      type: GraphQLFloat, 
     }, 
     category: { 
      type: categoryType, 
      resolve (purchase) { 
       return purchase.getCategory(); 
      } 
     } 
    }) 
}); 

module.exports = purchaseType; 

// Purchase/index.js 
const purchaseType = require('./type'); 
const purchaseQuery = require('./query'); 

module.exports = { 
    purchaseType, 
    purchaseQuery 
}; 

私はここで何かを台無しにしたのですか、それとも私ができないことをしようとしていますか?これは、循環参照の問題であると信じて私をリード何

編集#1 、私は次のようにフィールドpurchaseTypecategoryを変更した場合である:

category: { 
     // type: categoryType, 
     // resolve (purchase) { 
     //  return purchase.getCategory(); 
     // } 
     type: GraphQLInt, 
     resolve (purchase) { 
      return 10; 
     } 
    } 

categoryTypeに似た何かをしますpurchasesフィールドは正常に動作します。

答えて

0

Schema must contain unique named types but contains multiple types named "Category".

このエラーは、宣言した様々なGraphQLObjectTypeは、GraphQLObjectTypeのあなたのすべての名前をチェックして、それを変更し、同じであってはならないか、更新してくださいしてください名前をCategory複数回含まれていることを意味している明確ですあなたのすべてはTypeです。

注:GraphQLTypeすべての名前は一意である必要があり、それはお互いに

const categoryType = new GraphQLObjectType({ 
    name: 'Category', -------> others GraphQLObjectType may have same name Category 
    description: 'a purchasing category', 
    fields:() => ({ 
     ..... 
    }) 
}); 
+0

私はすべてのタイプをチェックしましたが、私は 'category'しか一度しか持っていません。私は何か試して私の質問を更新しました。 –

0

と一致していなければならない私の問題は、時価総額の問題になってしまいました。

私がやっていた私の schema.js

私がやっていた Category/type.js
const {purchaseType, purchaseQuery} = require('./resources/purchase/'); 

を:

const {purchaseType} = require('../Purchase'); 

ノードは、大文字と小文字を区別した方法でモジュールをキャッシュするので、二回purchaseTypモジュールをロードしました。