我想查询存储库中docs文件夹内的markdown文件的内容。我正在使用gatsby-source-graphql和GitHub v4 API。
到目前为止,我已经设法通过以下代码获取文件内容:
{
github {
search(first: 1, type: REPOSITORY, query: "repo:kalessil/phpinspectionsea") {
edges {
node {
... on GitHub_Repository {
folder: object(expression: "master:docs/") {
... on GitHub_Tree {
entries {
oid
object {
... on GitHub_Blob {
text
}
}
name
}
}
}
}
}
}
}
}
}
问题在于,任何类型的文件都可能最终位于目录内,例如txt
,并且需要进行额外的工作才能过滤掉。
是否有一种方法只能查询md
目录中扩展名为docs/
的文件?
编辑:
可以分三个步骤完成。首先通过查询所有文件,过滤然后查询单个文件:
{
github {
files: search(first: 1, type: REPOSITORY, query: "repo:kalessil/phpinspectionsea") {
edges {
node {
... on GitHub_Repository {
object(expression: "master:docs/") {
... on GitHub_Tree {
entries {
name
}
}
}
}
}
}
}
content: search(first: 1, type: REPOSITORY, query: "repo:kalessil/phpinspectionsea") {
edges {
node {
... on GitHub_Repository {
object(expression: "master:docs/DEVELOPERS.md") {
... on GitHub_Blob {
text
}
}
}
}
}
}
}
}
也许有更好的方法?
EDIT2:
我已经根据@robinmentral重构代码了(谢谢):
{
github {
files: repository(owner: "kalessil", name: "phpinspectionsea") {
... on GitHub_Repository {
object(expression: "master:docs/") {
... on GitHub_Tree {
entries {
name
}
}
}
}
}
content: repository(owner: "kalessil", name: "phpinspectionsea") {
... on GitHub_Repository {
object(expression: "master:docs/DEVELOPERS.md") {
... on GitHub_Blob {
text
}
}
}
}
}
}
但是它仍然需要在JavaScript方面进行过滤。因为我需要首先获取所有名称,所以请按扩展名过滤并仅直接查询那些文件。
这实际上是在gatsby-source-graphql中进行操作的正确方法;对于以后遇到此问题的任何人,请查看他们的示例项目。
现在我很好奇,是否有可能将所有这些操作组合在一起。
答案 0 :(得分:0)
紧跟着我的comment:如果您要查询特定文件的内容(例如您的示例),则可以使用以下更简洁的查询:
{
repository(owner: "kalessil", name: "phpinspectionsea") {
... on Github_Repository {
object(expression: "master:docs/DEVELOPERS.md") {
... on Github_Blob {
text
}
}
}
}
}