【问题标题】:Get Contentful entry by ID and locale通过 ID 和语言环境获取内容条目
【发布时间】:2019-07-18 17:54:25
【问题描述】:

Contentful npm 包提供对 API 中所有功能的访问。就我而言,我知道我想要的条目的 ID,但需要检索非默认语言环境的数据,我看不到任何传递语言环境选项的方法。我的查询如下所示:

const { createClient } = require('contentful');

const contentfulClient = createClient({
  accessToken: 'xxxxxxxx',
  space: 'xxxxxxx',
});

const entry = contentfulClient
  .getEntry('xxxxxx')
  .catch(console.error);

我知道我可以做到以下几点:

const data = await contentfulClient
  .getEntries({
    content_type: 'xxxxxx'
    locale: 'cy',
    'sys.id': xxxxx,
  })
  .catch(console.error);

const [entry] = data.items;

但这需要内容类型并返回一个条目数组,当我知道我想要的确切条目时,这似乎违反直觉。我错过了什么吗?期望它这样做似乎是合乎逻辑的事情。

【问题讨论】:

    标签: javascript contentful


    【解决方案1】:

    API documentation 上没有这样说,但您绝对可以通过 API 使用locale= 参数。

    ▶ curl -H "Authorization: Bearer $CONTENTFUL_ACCESS_TOKEN" https://cdn.contentful.com/spaces/$CONTENTFUL_SPACE_ID/entries/6wU8cSKG9UOE0sIy8Sk20G
    {
      "sys": {
        "space": {
          "sys": {
            "type": "Link",
            "linkType": "Space",
            "id": "xxxx"
          }
        },
        "id": "6wU8cSKG9UOE0sIy8Sk20G",
        "type": "Entry",
        "createdAt": "2018-09-06T22:01:55.103Z",
        "updatedAt": "2018-10-08T19:26:59.382Z",
        "environment": {
          "sys": {
            "id": "master",
            "type": "Link",
            "linkType": "Environment"
          }
        },
        "revision": 14,
        "contentType": {
          "sys": {
            "type": "Link",
            "linkType": "ContentType",
            "id": "section"
          }
        },
        "locale": "en-US"
      },
      "fields": {
        "internalTitle": "test test test",
        ...
    
    ▶ curl -H "Authorization: Bearer $CONTENTFUL_ACCESS_TOKEN" https://cdn.contentful.com/spaces/$CONTENTFUL_SPACE_ID/entries/6wU8cSKG9UOE0sIy8Sk20G\?locale\=\*
    {
      "sys": {
        "space": {
          "sys": {
            "type": "Link",
            "linkType": "Space",
            "id": "xxxx"
          }
        },
        "id": "6wU8cSKG9UOE0sIy8Sk20G",
        "type": "Entry",
        "createdAt": "2018-09-06T22:01:55.103Z",
        "updatedAt": "2018-10-08T19:26:59.382Z",
        "environment": {
          "sys": {
            "id": "master",
            "type": "Link",
            "linkType": "Environment"
          }
        },
        "revision": 14,
        "contentType": {
          "sys": {
            "type": "Link",
            "linkType": "ContentType",
            "id": "section"
          }
        }
      },
      "fields": {
        "internalTitle": {
          "en-US": "test test test"
        },
        ...
    
    

    documentation for the contentful JS client 说:

    参数:
    名称 类型 属性 描述。 标识字符串
    查询对象可选。
    带有搜索参数的对象。在这种方法中,它只对locale 有用。

    所以你可以像这样将语言环境作为第二个参数添加到getEntry

    const entry = contentfulClient
      .getEntry('xxxxxx', { locale: 'en-US' })
    

    【讨论】:

      猜你喜欢
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多