Как получить одну запись из Contentful и запросить по значению поля? - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь получить одну запись на основе настраиваемого поля имени моей записи.

Я пытался использовать JS SDK с различными вариантами:

client.getEntry("entryID")
    // .where("content_type", "Restaurant")
    // .where("fields.name[match]", "RestaurantName")
    // .all()
    .then(data => console.log('data', data))
    .catch(err => console.log('err', err))

Но, основываясь на предыдущих ошибках, я предлагаю использовать только .getEntry и передать идентификатор записи.

Я также смотрел на создание HTTP-запроса с axios, но столкнулся с аналогичной проблемой, связанной только с возможностью получить либо полный список записей, либо отфильтрованный на основе идентификатора записи.

Есть ли какой-нибудь выезд, который я могу получить с помощью `field.name ===" Slug "или какого-либо другого пользовательского поля, которое я добавил?

1 Ответ

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

В настоящее время единственный способ получить запись с использованием getEntry, это передать значение sys.id. Мы используем один контроллер в любое время, когда мы запрашиваем что-либо от Contentful. Это позволяет нам устанавливать сообщения об ошибках, преобразовывать возвращаемые данные в нужный нам формат и т. Д. Мы добавили в контроллер нашу собственную вспомогательную функцию getEntry, которую можно вызвать с помощью

contentfulController.getEntry({
   content_type: 'indexPage',
   'fields.slug[match]': slug,
   include: 3,
   locale: language,
});

Затем внутри нашей собственной функции getEntry мы берем первую в массиве и возвращаем объект, так как всегда знаем, что будем возвращать одну.

Однако важно отметить, что это может вызвать проблемы, если в слаге есть подстроки. Допустим, у вас есть два предмета со слизнями:

/resource
/resourcelisting

Если вы запросите 'fields.slug [match]': '/ resource', он вернет оба результата в результатах, поэтому вы должны также проверить, какой из них имеет нужный вам слаг, а не его часть.

...