0

我正在关注 youtube 上关于使用 GraphQL 对无头 wordpress api 执行基本查询的教程之一。本教程(现在已有一年多)所做的查询是:

query getBookBySlug($slug: String) {
    book: bookBy(uri: $slug) {
      title
      book_meta{
        price
        publisher
      }
    }
  }

Books/book 是一个自定义的 pust 类型,我可以使用 wordpress 中的 GraphiQL 操场查询它以查看它返回的内容。上面查询的问题是 ir 返回 null。此外, bookBy (或 postBy )已被弃用(根据我在 GraphiQL 中得到的警告,在我的情况下建议改为 post(id: "") 或 book(id: "") 。问题是我想查询由“uri”而不是“id”预订,似乎没有查询的选项:

book(uri: "")

唯一的选择似乎是:

book(id: "")

uri 字段存在并已填充。GraphiQL 中的此查询成功返回所有必需的书籍详细信息:

query getBook {
  book(id: "cG9zdDo0MA==") {
    title
    slug
    uri
    book_meta {
      price
    }
  }
}

如何更改第一个函数以通过 uri 查询一本书?

4

2 回答 2

0

我用 slug 和 nuxtjs

async asyncData({ params }) {
    const data = {
      query: `query GET_POST($slug: String) {
        postBy(slug: $slug) {
          title
          content
          author {
            node {
              name
            }
          }
          featuredImage {
            node {
              caption
              altText
              sourceUrl(size: LARGE)
            }
          }
          date
        }
      }`,
      variables: {
        slug: params.slug
      }
    }

    const options = {
      method: 'POST',
      headers: { 'content-type': 'application/json' },
      data: data,
      url: 'http://localhost/graphql'
    };
        
    try {
      const response = await axios(options);
      
      return {
        loadedPost: response.data.data.postBy
      } 
    } catch (error) {
      console.error(error);
    } 
  },
于 2020-09-13T01:51:19.987 回答
0

该查询getBookBySlug在您的代码某处声明了参数(必须有构建完整架构)。您需要将这些参数更改为 accepturi而不是id.

此外,接收这些参数并返回书籍的函数必须能够处理uri参数并在数据库中找到正确的书籍。

于 2020-07-26T22:15:16.497 回答