从Contentful条目ID获取图像URL

时间:2018-03-01 08:33:06

标签: contentful

我需要从Contentful条目ID中获取图片网址。 我从Contentful查询中获得了这样一个JSON

{
"sys":{
  "space":{
     "sys":{
        "type":"Link",
        "linkType":"Space",
        "id":"8v1e7eaw70p2"
     }
  },
  "id":"1JfEwVlD9WmYikE8kS8iCA",
  "type":"Entry",
  "createdAt":"2018-02-28T18:50:08.758Z",
  "updatedAt":"2018-02-28T18:50:08.758Z",
  "revision":1,
  "contentType":{
     "sys":{
        "type":"Link",
        "linkType":"ContentType",
        "id":"image"
     }
  },
  "locale":"en-US"
},
"fields":{
  "name":"heat",
  "image":{
     "sys":{
        "type":"Link",
        "linkType":"Asset",
        "id":"6Inruq2U0M2kOYsSAu8Ywk"
     }
  }
}
}

我正在使用他们提供的JS驱动程序:

client.getEntry()

那么如何通过该链接:6Inruq2U0M2kOYsSAu8Ywk?

3 个答案:

答案 0 :(得分:1)

不幸的是,js SDK在使用单一条目端点时无法解析链接,即client.getEntry(),因为没有足够的数据。

当我总是建议解决这个问题时,请使用带有查询的集合端点作为查询参数。这样,您将始终获得所需条目及其所有链接数据。 你的代码看起来应该是这样的

client.getEntries({'sys.id': '6Inruq2U0M2kOYsSAu8Ywk'})
  .then(response => console.log(response.items[0].fields.image.fields.file.url))

我希望有所帮助。 最好, 物语

答案 1 :(得分:0)

使用client.getEntries({'sys.id': '1JfEwVlD9WmYikE8kS8iCA'}) 获取输入字段和资产字段。

您还可以通过在获取数据后运行此资产来将资产修补到字段:

/* Patch all the assets to the fields */
  const patchAssets = (fields, assets) => {
    Object.keys(fields).forEach(function (key) {
      let obj = fields[key];
      if (obj.sys && obj.sys.linkType === 'Asset') {
        const assetId = obj.sys.id;
        const matchAsset = assets.find(asset => {
          return asset.id === assetId;
        });
        obj.file = matchAsset;
      }
    });
    return fields;
  };

答案 2 :(得分:0)

获取图像URL的另一种方法是使用getAsset('<asset_id>')。因此,首先,需要使用getEntry()方法来获取条目数据,然后从以下字段中提取ID:fields.image.sys.id,并将其传递给getAsset方法。