如何从 Contentful 中获取单个条目并按字段值查询?

Str*_*ch0 5 javascript content-management-system contentful axios

我正在尝试根据条目的名称自定义字段检索单个条目。

我尝试过使用 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))
Run Code Online (Sandbox Code Playgroud)

但根据返回的错误,这表明我只能使用.getEntry并传入条目 ID。

我还考虑过使用 发出 HTTP 请求,axios但遇到了类似的问题,只能检索完整的条目列表或根据条目 ID 进行过滤。

我可以通过 `field.name === "Slug" 或我添加的其他自定义字段来获取吗?

小智 6

目前使用 getEntry 获取条目的唯一方法是传入 sys.id 值。当我们向 Contentful 请求任何内容时,我们都会使用单个控制器。这允许我们设置错误消息,将返回的数据转换为我们想要的格式等。我们向控制器添加了我们自己的 getEntry 辅助函数,可以通过

contentfulController.getEntries({
   content_type: 'indexPage',
   'fields.slug[match]': slug,
   include: 3,
   locale: language,
});
Run Code Online (Sandbox Code Playgroud)

然后在我们自己的 getEntry 函数中,我们获取数组中的第一个,并返回该对象,因为我们总是知道我们将返回一个。

但值得注意的是,如果 slug 中有子字符串,这可能会导致问题。假设您有两个带有蛞蝓的物品:

/resource
/resourcelisting
Run Code Online (Sandbox Code Playgroud)

如果您查询 'fields.slug[match]': '/resource',它将返回结果中的两项,因此您还应该检查哪一项具有您想要的实际 slug,而不是其中的一部分。