2017-04-03 9 views
0

Graphqlを学習していて、過去2〜3日でノードサーバにgraphql-relayを実装し始めました。私のリレーノード定義を宣言するとき、私は "instanceof 'の右辺は呼び出し可能ではないというエラーを受けています。右辺はコンストラクタ関数を持つオブジェクトです。限り、私はこれが不正な使用のためではないと言うことができる限り、これはドキュメントからコピーされたと考えている。私はそれが正常に動作しているときに期待される結果が何であるかわからない、私はそれが作品を介して配置され、要求されたデータが返されるGraphQLタイプを返すと仮定します。Relay nodeDefinition throw「「instanceof」の右側が呼び出せません」

var {nodeInterface, nodeField} = nodeDefinitions(
    (globalId) => { 
    var {type, id} = fromGlobalId(globalId); 
    console.log(type); 
    if (type === 'User') { 
     return db.models.user.findById(id) 
    } else if (type === 'Video') { 
     return db.models.video.findById(id) 
    } 
    else if (type === 'Producer') { 
     return db.models.user.findById(id) 
    } 
    else if (type === 'Viewer') { 
     return db.models.user.findById(id) 
    }else { 
     return null; 
    } 
    }, 
    (obj) => { 

    console.log(obj);    // Sequelize object 
    console.log(User);    // user 
    console.log(User.constructor); // valid constructor 

    // This is where the error occurs 
    if (obj instanceof User) { 
    return UserType; 
    } else if (obj instanceof Video) { 
    return VideoType; 
    } else { 
    return null; 
    } 
}); 

注:

  • Sequelize ORMを使用します。
  • ユーザーは、GraphQLのインターフェイスであり、ビューア、プロデューサ、および一般ユーザーの種類によって実装されたスキーマです。私のpsqlデータベースにはもう1つのUserテーブルしかありません。なぜなら、2番目の関数はUserだけをチェックし、これらの追加のタイプはチェックしないからです。
  • すべてなどのユーザー、動画、ために私の他のクエリが正常に動作、それはノード& & globalIdで検索された場合にのみ、それは

答えて

0

アン「コンストラクタ関数を使用してオブジェクトを」壊したときに呼び出すことはできません。おそらくあなたは、このようなコンストラクタで、そのオブジェクトクラスを作成する必要があります。

... 

if (obj instanceof User) { 

... 

} else if (obj instanceof Video) { 

.... 

へ:

class User { 
    constructor(id, name, email) { 
    this.id = id; 
    // etc 
    } 
} 
+0

それはコンストラクタを持っています、私はそれを私のコンソールに記録しています。私はすでに安定しているはずの作業を将来的に見つけました。 –

0

あなたはからコードを変更する必要が

... 

if (obj instanceof User.Instance) { 

... 

} else if (obj instanceof Video.Instance) { 

.... 
関連する問題