2016-12-01 12 views
8

Với lược đồ graphql máy chủ apollo sau đây tôi muốn chia nhỏ các mô đun này thành các mô-đun riêng biệt, vì vậy tôi không muốn truy vấn tác giả trong lược đồ truy vấn gốc. . Vì vậy, tôi đã thêm một lớp khác được gọi là authorQueries trước khi thêm nó vào Truy vấn gốcCách tạo một trình phân giải lồng nhau trong máy chủ graphollo apollo

Tôi đã thử những điều sau .. bạn có thể thấy rằng tác giả đã được thêm làm lớp khác trước khi hàm tác giả được chỉ định.

Query: { 
    authorQueries :{ 
     author (root, args) { 
      return {} 
     } 
    } 
} 

Khi truy vấn trong Graphiql, tôi cũng nói thêm rằng thêm lớp ..

{ 
    authorQueries { 
     author(firstName: "Stephen") { 
      id 
     } 
    } 
} 

tôi nhận được lỗi sau.

"message": "Resolve function for \"Query.authorQueries\" returned undefined",

Trả lời

12

Để tạo một "lồng nhau" giải quyết, chỉ cần xác định resolver trên kiểu trả về của lĩnh vực mẹ. Trong trường hợp này, lĩnh vực authorQueries của bạn trả về kiểu authorQueries, vì vậy bạn có thể đặt resolver của bạn có:

{ 
    Query: { authorQueries:() => ({}) }, 
    authorQueries: { 
    author(root, args) { 
     return "Hello, world!"; 
    } 
    } 
} 

Vì vậy, theo nghĩa kỹ thuật, không có những điều như một resolver lồng nhau - tất cả các loại đối tượng có một danh sách phẳng của các trường và các trường đó có các kiểu trả về. Việc lồng ghép truy vấn GraphQL là điều làm cho kết quả lồng nhau.

+0

Không có cách nào tốt hơn, như xác định trình phân giải cho loại tác giả, sử dụng một số giá trị của thông số gốc quá mức? Khi tôi làm như thế này, tôi đã thực hiện một giải quyết cho mọi lần một auther được sử dụng trong một loại khác – user7776232

+0

Yep, bạn cần xác định trình phân giải cho mọi trường trả về Tác giả, ít nhất là trong việc triển khai GraphQL hiện tại. Có thể tốt hơn trong tương lai. – stubailo

Các vấn đề liên quan