2016-09-21 6 views
1

GraphQlのドキュメントを読んで、新しいSchema Langugageがデフォルトのリゾルバだけをサポートしていることに気付きました。新しいスキーマ言語を使用している間にカスタムリゾルバを追加する方法はありますか?GraphQLスキーマ言語でネストされたオブジェクトを返す方法

let userObj = { 
 
    id: 1, 
 
    name: "A", 
 
    homeAddress: { 
 
    line1: "Line1", 
 
    line2: "Line2", 
 
    city: "City" 
 
    } 
 
}; 
 

 
let schema = buildSchema(` 
 
    type Query { 
 
    user(id: ID): User 
 
    } 
 

 
    type User { 
 
    id: ID 
 
    name: String 
 
    address: String 
 
    } 
 
`); 
 

 
//I would like User.address to be resolved from the fields in the json response eg. address = Line1, Line2, City

これは私が定義したスキーマです。ここでは、アドレスオブジェクトを解析し、連結された文字列値を返すような動作を追加したいと考えています。

答えて

0

あなたはここに混乱しているようですが、そのアドレスは文字列であると定義していますが、それを解決するために辞書を送るからです。

あなたができることは、スカラーアドレスタイプを定義することです。 scalar AddressType buildSchemaを使用して解析関数をアタッチする場合は、これを指定します。 (または簡単にそれを行うにはgraphql-toolsを使用)

またはthe official documentationsに示すように、最初からタイプを構築:

var OddType = new GraphQLScalarType({ 
    name: 'Odd', 
    serialize: oddValue, 
    parseValue: oddValue, 
    parseLiteral(ast) { 
    if (ast.kind === Kind.INT) { 
     return oddValue(parseInt(ast.value, 10)); 
    } 
    return null; 
    } 
}); 

function oddValue(value) { 
    return value % 2 === 1 ? value : null; 
} 

は、その後、あなたは文字列(parseValue)に辞書を解析することができますし、そうでない場合は

+0

謝罪を返します。オブジェクトの 'address'フィールドの名前を 'homeAddress'に変更して質問を更新しました。だから私はそのオブジェクトをストリングに解決したい。私の質問は、新しいスキーマ言語でそれを達成する方法に関するものです。 – achakravarty

+0

新しいbuildSchemaは依然としてリゾルバをスキーマにアタッチする必要があり、スケルトンを定義しますが、フィールドの解析/解析/解決方法を知る必要があります。 – HagaiCo

+0

気がついた。新しいbuildSchemaを使用して達成する方法があるかどうか疑問に思うだけです。私はそれがはるかにクリーンなように新しい構文が好きです。 – achakravarty

2

HagaiCoによると、このgithub issueでは、正しい方法はgraphql-toolsとすることです。

これはスキーマを取り、関数を解決makeExecutableSchemaと呼ばれる機能を有しており、次に実行可能なスキーマを

関連する問題