Gatsby.js - pdf-файл GraphQL Query в allMarkdownRemark - PullRequest
0 голосов
/ 24 января 2019

Я сейчас создаю сайт Гэтсби для школьного проекта и наткнулся на что-то, чего я сам не мог понять.

В основном у меня есть несколько файлов уценки.Они содержат поле frontmatter под названием «file» с именем другого файла (например, «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', а затем сопоставить файл уценки с файлом PDF по абсолютным путям, ноЯ надеюсь, что есть лучшее решение, чем это.

1 Ответ

0 голосов
/ 27 января 2019

Это когда вы хотите использовать mapping, но это плохо документировано ни для чего, кроме файла 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                   
                   }
               }
           }
       }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...