【发布时间】:2019-09-10 10:37:24
【问题描述】:
我想查询存储库中 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,并且需要额外的工作才能过滤掉。
有没有办法在docs/ 目录中只查询带有md 扩展名的文件?
编辑:
可以分三步完成。首先通过查询所有文件,过滤然后查询单个文件:
{
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中的正确做法;对于将来遇到此问题的任何人,请查看他们的示例项目。
现在我只是好奇是否有可能将所有这些操作合二为一。
【问题讨论】:
-
看来你解决了!您可以使用
repository(owner: "kalessil", name: "phpinspectionsea") { ... on Repository { ... } }而不是使用search来改进您的存储库查询。 -
感谢您的洞察力。实际上,我仍然不知道该怎么做。仍然需要 GraphQL > JS > GraphQL 才能获得结果,这确实完成了任务。现在我只是好奇这是否可能。
-
不知道这是否可能,我遇到了类似的问题,我无法使用 GitHub GraphQL API 解决。而且从 StackOverflow 获得的帮助也很少,太新了。如果这里没有进一步的帮助,您可以尝试在GitHub community forums 上提问。我很想看看你的想法!
-
附带说明,可以删除
... on GitHub_Repository {}并在repository查询之后直接使用object。