我目前正在为一个学校项目建立一个盖茨比网站,并遇到了一些我自己无法弄清楚的事情.
基本上我有一些降价文件.它们包含一个名为“file”的frontmatter字段,其名称为另一个文件(例如:“test.pdf”)作为值.
我需要知道这些文件的公共URL.
我试着写这样的查询:
query SiteQuery{
publications: allMarkdownRemark(
filter: { fileAbsolutePath: {regex : "/publications/"} },
sort: { order: DESC, fields: [frontmatter___date] },
){
edges {
node {
frontmatter {
date(formatString: "MMMM DD, YYYY"),
title,
file{
publicURL
}
}
}
}
}
}
但它总是将字段“文件”解释为字符串,我认为这很奇怪,因为我已经使用这样的图像执行相同的过程:
...
node {
frontmatter {
date(formatString: "MMMM DD, YYYY"),
title,
picture {
childImageSharp {
fluid{
...GatsbyImageSharpFluid
}
}
}
}
}
...
我已经找到了答案,但我能找到的最有帮助的结果是在这个网站上:https://www.gatsbyjs.org/docs/adding-images-fonts-files/
但我无法使其发挥作用.
谁能告诉我这里做错了什么?
当然,我总是可以用’allFile’编写第二个查询,然后通过绝对路径匹配markdown文件和pdf文件,但我希望有更好的解决方案.
解决方法:
这是您想要使用映射的时候,但对于任何非Markdown或JSON文件的内容都没有很好的文档记录.
gatsby-config.js – 映射
// NOTE: the frontmatter `file` and property `base` must have unique values
// That is, don't allow any files to have the same name if mapping `base`
mapping: {
'MarkdownRemark.frontmatter.file' : 'File.base',
}
所以现在你可以成功地做到:
query SiteQuery{
publications: allMarkdownRemark(
filter: { fileAbsolutePath: {regex : "/publications/"} }
sort: { order: DESC, fields: [frontmatter___date] }
){
edges {
node {
frontmatter {
date(formatString: "MMMM DD, YYYY")
title
file {
publicURL
}
}
}
}
}
}