GraphQL 查询 ID 以外的其他内容

Sar*_*aro 8 apollo graphql strapi nuxt.js

我正在使用Strapi和 Nuxt.js 来实现我的第一个 Headless CMS。我正在使用 Apollo 和 GraphQL。

我遇到了当前的错误,并且好几天都没能解决这个问题。

如果我写:

query Page($id: ID!) {
  page(id: $id) {
    id
    slug
    title
  }
}
Run Code Online (Sandbox Code Playgroud)

并传递以下变量:

{
  "id" : "1"
}
Run Code Online (Sandbox Code Playgroud)

我收到了正确的预期结果:

{
  "data": {
    "page": {
      "id": "1",
      "slug": "/",
      "title": "Homepage"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,我想不通过 ID 获取内容,而是通过我在 Strapi 中创建的名为“slug”的字段获取内容。环顾四周,似乎我应该能够执行以下操作:

query Page($slug: String!) {
  page(slug: $slug) {
    id
    slug
    title
  }
}
Run Code Online (Sandbox Code Playgroud)

带变量:

{
  "slug" : "/"
}
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

{
  "error": {
    "errors": [
      {
        "message": "Unknown argument \"slug\" on field \"page\" of type \"Query\".",
        "locations": [
          {
            "line": 2,
            "column": 8
          }
        ],
        "extensions": {
          "code": "GRAPHQL_VALIDATION_FAILED",
          "exception": {
            "stacktrace": [
Run Code Online (Sandbox Code Playgroud)

......错误继续......

[UPDATE] Italo回复后,我改成:

query Pages($slug: String!) {
  page(where: {slug: $slug}) {
    id
    slug
    title
  }
}
Run Code Online (Sandbox Code Playgroud)

但我现在收到以下错误:

{
  "error": {
    "errors": [
      {
        "message": "Unknown argument \"where\" on field \"page\" of type \"Query\".",
Run Code Online (Sandbox Code Playgroud)

我还注意到,如果我将“页面”更改为“页面”,我会收到一个查询,但它显示了所有页面......

我错过了什么?谢谢!

Ita*_*res 7

要使用主键以外的其他内容查询一个项目(并且仅使用来自 Strapi 的默认内置查询),您需要使用可用作 where 子句的过滤器:

query Pages($slug: String!) {
  pages(where: {slug: $slug}) {
    id
    slug
    title
  }
}
Run Code Online (Sandbox Code Playgroud)

提示:使用http://localhost:1337/graphql 中可用的 Graphql 接口 进行测试。(如果你还没有)

  • 用这种方式就可以了,用pages[0]来获取记录,一点问题都没有。但如果你想要更好的东西,唯一的方法是[在 graphql 模式上创建自定义端点](https://strapi.io/documentation/3.0.0-beta.x/plugins/graphql.html#customise-the -graphql-schema)这并不难,而且是开始调整 Strapi 的好方法。 (2认同)