問題描述
如何從 Contentful 中獲取單個條目並按字段值查詢? (How to fetch a single entry from Contentful and query by field value?)
我正在嘗試根據我的條目的名稱自定義字段檢索單個條目。
我嘗試使用具有各種選項的 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
並傳入條目 ID。
我還查看了使用 axios
發出 HTTP 請求但遇到了類似的問題,只能檢索完整的條目列表或根據條目 ID 過濾。
我可以通過 `field.name === "Slug" 獲取還是我添加的其他自定義字段?
參考解法
方法 1:
Currently the only way to get an entry using getEntry, is to pass in the sys.id value. We use a single controller anytime that we request anything from Contentful. This allows us to set error messages, transform the data returned into the format we want etc. We added to the controller our own getEntry helper function that can be called by
contentfulController.getEntries({
content_type: 'indexPage',
'fields.slug[match]': slug,
include: 3,
locale: language,
});
Then inside our own getEntry function we grab the first one in the array, and return the object since we always know we will be returning one.
However its important to note that this can cause issues if you have sub strings in the slug. Lets say you have two items with the slugs:
/resource
/resourcelisting
If you query 'fields.slug[match]': '/resource', it will return both items in the results so you should also check which one has the actual slug you want, not part of it.
(by Stretch0、Brad Taylor)