2017-12-27 16 views
0
const { 
    makeExecutableSchema 
} = require('graphql-tools'); 
const resolvers = require('./resolvers'); 

const typeDefs = ` 

    type Link { 
    args: [Custom] 
    } 

    union Custom = One | Two 

    type One { 
    first: String 
    second: String 
    } 

    type Two { 
    first: String 
    second: [String] 

    } 

    type Query { 
    allLinks: [Link]! 

    } 

`; 

const ResolverMap = { 
    Query: { 
    __resolveType(Object, info) { 
     console.log(Object); 
     if (Object.ofType === 'One') { 
     return 'One' 
     } 

     if (Object.ofType === 'Two') { 
     return 'Two' 
     } 
     return null; 
    } 
    }, 
}; 

// Generate the schema object from your types definition. 
module.exports = makeExecutableSchema({ 
    typeDefs, 
    resolvers, 
    ResolverMap 
}); 


//~~~~~resolver.js 
const links = [ 
    { 
     "args": [ 
      { 
       "first": "description", 
       "second": "<p>Some description here</p>" 
      }, 
      { 
       "first": "category_id", 
       "second": [ 
        "2", 
        "3", 
       ] 
      } 

     ] 
    } 
]; 
module.exports = { 
    Query: { 
     //set data to Query 
     allLinks:() => links, 
     }, 
}; 

graphql의 다큐멘터리가 너무 나쁘기 때문에 혼란 스럽습니다. 나는 솔직하게 스키마에서 공용체 또는 인터페이스를 사용할 수 있도록 resolveMap 함수를 적절하게 설정하는 방법을 모른다. 지금은 쿼리 실행을 사용할 때 생성 된 스키마가 인터페이스 또는 연합 유형을 실행에 사용할 수 없다는 오류가 표시됩니다. 이 스키마를 올바르게 실행하려면 어떻게해야합니까?GraphqlJS- 유형 충돌 - 공용체 또는 인터페이스를 사용할 수 없습니다.

답변

1

resolversResolverMapresolvers로 함께 정의한다. 또한, 유형의 해결은 Custom 조합 유형이 아닌 Query에 대해 정의해야합니다.

const resolvers = { 
    Query: { 
    //set data to Query 
    allLinks:() => links, 
    }, 
    Custom: { 
    __resolveType(Object, info) { 
     console.log(Object); 
     if (Object.ofType === 'One') { 
     return 'One' 
     } 

     if (Object.ofType === 'Two') { 
     return 'Two' 
     } 
     return null; 
    } 
    }, 
}; 

// Generate the schema object from your types definition. 
const schema = makeExecutableSchema({ 
    typeDefs, 
    resolvers 
}); 

업데이트 : 영업 이익은 오류 "Abstract type Custom must resolve to an Object type at runtime for field Link.args with value \"[object Object]\", received \"null\"."을 얻고 있었다. 형 해결 Object.ofType === 'One'Object.ofType === 'Two'의 조건이 항상 false 때문에 Object 내부 ofType라는 더 필드가 없기 때문에 그것은이다. 따라서 해결 된 유형은 항상 null입니다.

는 그것을 수정하거나 args 배열 ( resolvers.js에서 links 상수)의 각 항목에 ofType 필드를 추가하거나 typeof Object.second === 'string'Array.isArray(Object.second)처럼 뭔가 조건을 변경하려면

+0

임 오류가 이제 점점 :' "추상 형식의 사용자 정의가 해결해야 값 \ "[개체 개체] \"필드 Link.args에 대한 런타임에 개체 유형은 \ "널 \". "'나는'유형 Custom' 정의해야합니다을받은? 무엇을 포함해야합니까? – Brunhilda

+1

나는 'One''와'Object.ofType ==='Two'''Object.ofType === 항상 'FALSE'이기 때문에 그것의 생각한다. 그래서 해결 된 타입은 항상 'null'입니다. 'args' 배열의 각 항목에'ofType' 필드를 추가하십시오 (resolvers.js의'linked' 상수). 아니면 대해서 typeof Object.second === 'string''와'Array.isArray (Object.second)''로 조건을 변경합니다. 지금 내 컴퓨터가 아니기 때문에 확인할 수 없습니다. – Bless

+0

오 마이 하나님, 너를 사랑해. 나는 몇 주 동안 그것에 대해 생각해 왔고, 많은 사람들이 나를 도우려고 노력했다. 그리고 그 오랜 시간이 지난 후에 마침내 애송이가되었다. 너는 나의 구세주 야. 당신은 내가 얼마나 고맙게 여기에 있는지 모른다. – Brunhilda