GraphQL для запроса чего-либо кроме ID - PullRequest
2 голосов
/ 14 января 2020

Я использую Strapi с Nuxt. js для реализации моей первой CMS без головы. Я использую Apollo и GraphQL.

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

Если я напишу:

query Page($id: ID!) {
  page(id: $id) {
    id
    slug
    title
  }
}

И передайте следующую переменную:

{
  "id" : "1"
}

Я получил правильный ожидаемый результат:

{
  "data": {
    "page": {
      "id": "1",
      "slug": "/",
      "title": "Homepage"
    }
  }
}

ОДНАКО, я хотел бы получить контент не через идентификатор, а через Поле, которое я создал в Страпи, называется «слизень». Оглядываясь вокруг, кажется, что я должен быть в состоянии сделать что-то вроде:

query Page($slug: String!) {
  page(slug: $slug) {
    id
    slug
    title
  }
}

С переменной:

{
  "slug" : "/"
}

, но я получаю эту ошибку:

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

... ошибка продолжается ....

[ОБНОВЛЕНИЕ] После того, как Итало ответил, я изменил его на:

query Pages($slug: String!) {
  page(where: {slug: $slug}) {
    id
    slug
    title
  }
}

Но теперь я получаю следующую ошибку:

{
  "error": {
    "errors": [
      {
        "message": "Unknown argument \"where\" on field \"page\" of type \"Query\".",

Я также заметил, что я получаю запрос, если я изменяю "page" на "pages", но он показывает все страницы ...

Чего мне не хватает? Спасибо!

1 Ответ

2 голосов
/ 14 января 2020

Чтобы запросить один элемент с использованием чего-то другого, кроме первичного ключа (и используя только встроенные запросы по умолчанию от Strapi), вам нужно использовать доступные фильтры как предложение where:

query Pages($slug: String!) {
  pages(where: {slug: $slug}) {
    id
    slug
    title
  }
}

Совет: используйте интерфейс Graphql, доступный в http://localhost: 1337 / graphql , чтобы проверить это. (если вы еще не)

...