Apollo GraphQL 服务器:在解析器中,从更高的几个级别获取变量
Apollo GraphQL server: In resolvers, get variables from several levels higher
在我的解析器中说我有以下内容:
Query: {
author: (root, args) => API.getAuthor(args.authorId),
},
Author: {
book: (author, args) => API.getBook(author.id, args.bookId),
},
Book: {
// Here, I can't get the author ID
chapter: (book, args) => API.getChapter(authorId???, book.id, args.chapterId),
}
从上面的例子中我的问题已经很清楚了,我怎样才能访问更高级别的变量?
我希望能够提出如下请求:
author(authorId: 1) {
id
book(bookId: 31) {
id
chapter(chapterId: 3) {
content
}
}
}
而我获取特定章节的连接器也需要作者的ID。
您无法从 GraphQL 中的更高级别访问变量。
这是有意的:因为 Book
实体也可以包含在其他对象中。现在,您有 author { book { chapter } }
,但您也可以有 library { book { chapter } }
,其中 author
字段不会出现在查询中,从而使 author.id
变量无法访问。
每个对象负责使用自己的数据获取自己的字段,这使得整个对象可组合。
不过,您可以做的是扩展 API.getBooks
函数的响应,将 author_id
字段添加到返回的对象中。这样,您就可以在 Book
实体中访问它:book.authorId
.
function myGetBook(authorId, bookId) {
return API.getBook(authorId, bookId)
.then(book => {
return Object.assign(
{},
theBook,
{ authorId }
);
});
}
然后:
Author: {
book: (author, args) => myGetBook(author.id, args.bookId),
},
Book: {
chapter: (book, args) => API.getChapter(book.authorId, book.id, args.chapterId),
}
在我的解析器中说我有以下内容:
Query: {
author: (root, args) => API.getAuthor(args.authorId),
},
Author: {
book: (author, args) => API.getBook(author.id, args.bookId),
},
Book: {
// Here, I can't get the author ID
chapter: (book, args) => API.getChapter(authorId???, book.id, args.chapterId),
}
从上面的例子中我的问题已经很清楚了,我怎样才能访问更高级别的变量? 我希望能够提出如下请求:
author(authorId: 1) {
id
book(bookId: 31) {
id
chapter(chapterId: 3) {
content
}
}
}
而我获取特定章节的连接器也需要作者的ID。
您无法从 GraphQL 中的更高级别访问变量。
这是有意的:因为 Book
实体也可以包含在其他对象中。现在,您有 author { book { chapter } }
,但您也可以有 library { book { chapter } }
,其中 author
字段不会出现在查询中,从而使 author.id
变量无法访问。
每个对象负责使用自己的数据获取自己的字段,这使得整个对象可组合。
不过,您可以做的是扩展 API.getBooks
函数的响应,将 author_id
字段添加到返回的对象中。这样,您就可以在 Book
实体中访问它:book.authorId
.
function myGetBook(authorId, bookId) {
return API.getBook(authorId, bookId)
.then(book => {
return Object.assign(
{},
theBook,
{ authorId }
);
});
}
然后:
Author: {
book: (author, args) => myGetBook(author.id, args.bookId),
},
Book: {
chapter: (book, args) => API.getChapter(book.authorId, book.id, args.chapterId),
}