查询文件夹usign Graphql和gatsby-source-filesystem

时间:2020-07-24 22:26:21

标签: graphql filesystems gatsby

编辑

我认为我不清楚我的问题。

问题在于即使文件夹中包含内容和.md文件,sourceInstanceName也会返回问题中显示的空数组。

大家好,我在用graphql查询文件夹时遇到了问题。

您看到我具有以下文件结构:

/content/posts/Journeys/{FILENAME}.{EXTENSION}
/content/posts/Blog/{FILENAME}.{EXTENSION}

我要查询文件夹名称(又称“旅程”或BLOG)而不是内容。

我可以使用以下查询:

query test2 {
  journeys: allFile(filter: {sourceInstanceName: {eq: "posts"}}) {
    edges {
      node {
        dir
        name
        relativePath
        relativeDirectory
      }
    }
  }
}

哪个返回此值,在此返回不必要的文件,因为我只想要文件夹名称或目录:

{
  "data": {
    "journeys": {
      "edges": [
        {
          "node": {
            "dir": "D:/Side-projects/salomonpina.dev/content",
            "name": ".git",
            "relativePath": ".git",
            "relativeDirectory": ""
          }
        },
        {
          "node": {
            "dir": "D:/Side-projects/salomonpina.dev/content/icons/png",
            "name": "github-icon_512",
            "relativePath": "icons/png/github-icon_512.png",
            "relativeDirectory": "icons/png"
          }
        },

more info down...

它也适用于资产

但是当我将(filter: {sourceInstanceName: {eq: "posts"}})更改为(filter: {sourceInstanceName: {eq: "journeys"}})

它返回一个空数组:

{
  "data": {
    "journeys": {
      "edges": []
    }
  }
}

即使使用正确的名称,该名称也来自gatsby-source-filesystem

这就是我在gatsby-config.jsgatsby-source-filesystem中所做的事情。

{
      resolve: "gatsby-source-filesystem",
      options: {
        name: "posts",
        path: `${__dirname}/content/`,
      },
    },

    {
      resolve: "gatsby-source-filesystem",
      options: {
        name: "assets",
        path: `${__dirname}/static/`,
      },
    },

    {
      resolve: "gatsby-source-filesystem",
      options: {
        name: "journeys",
        path: `${__dirname}/content/posts/Journeys/`,
      },
    },

我已经尝试过this solution,但似乎并没有帮助我。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

缺少有关文件数据类型(扩展名)的信息,这会影响您应如何收集post信息。直接获得对内容本身的sourceInstanceName访问权限后需要执行的操作。假设您具有降价结构,则该结构将为childMarkdownRemark,因此应该可以:

{
  allFile(filter: {sourceInstanceName: {eq: "journeys"}}) {
    edges {
      node {
        sourceInstanceName
        childMarkdownRemark {
          frontmatter {
            slug
          }
        }
      }
    }
  }
}

注意:自childMarkdownRemark对象以来,您的嵌套结构可能与我的不同。检查localhost:8000/___graphql游乐场以查看哪个是您的查询对象。

此外,我认为您的gatsby-node.js中缺少Blog文件夹的文件系统:

{
  resolve: "gatsby-source-filesystem",
  options: {
    name: "blog",
    path: `${__dirname}/content/posts/Blog/`,
  },
},

如果您没有从查询中检索到任何值,请删除filter以检查每个sourceInstanceName中的post是什么(以检查它们是否正确设置或过滤器是否正确由于错字而无法正常工作)。在localhost:8000/___graphql游乐场中检查他们。


我不知道您的要求或规范,但是也许在您的post GraphQL模式中添加另一个字段也很适合您,比如说categoryjourney或{{1} }),根据您的想法,它对您有效且更具扩展性。