【问题标题】:How to access 'rel' from Links in header? Hypermedia link relations如何从标题中的链接访问“rel”?超媒体链接关系
【发布时间】:2018-05-07 00:59:06
【问题描述】:

我正在使用 json 服务器和 axios

标题的结果

link: "<http://localhost:3001/posts?_page=1>; rel="first", <http://localhost:3001/posts?_page=2>; rel="next", <http://localhost:3001/posts?_page=5>; rel="last""

如何使用/访问链接中的这些数据?除了 github 之外,似乎没有关于如何解析或访问它的信息。我尝试了link.rels[:last] 就像来自 github 但它不起作用。

【问题讨论】:

  • 您是否查看了此链接:stackoverflow.com/questions/8735792/…?
  • 我没见过那个。很有帮助
  • @Catfish,有什么更新吗?
  • @TarunLalwani 来自 31piy 的链接非常有帮助。它有一个库来简单地做到这一点。我还决定使用 octokit js lib,它有处理这个github.com/octokit/rest.js的方法

标签: javascript json hyperlink hypermedia json-server


【解决方案1】:

由于 JS 非常灵活,你可以简单地使用

data = 'link: "<http://localhost:3001/posts?_page=1>; rel="first", <http://localhost:3001/posts?_page=2>; rel="next", <http://localhost:3001/posts?_page=5>; rel="last""'

function parseData(data) {
    let arrData = data.split("link:")
    data = arrData.length == 2? arrData[1]: data;
    let parsed_data = {}

    arrData = data.split(",")

    for (d of arrData){
        linkInfo = /<([^>]+)>;\s+rel="([^"]+)"/ig.exec(d)

        parsed_data[linkInfo[2]]=linkInfo[1]
    }

    return parsed_data;
}

console.log(parseData(data))

输出是

{ first: 'http://localhost:3001/posts?_page=1',
  next: 'http://localhost:3001/posts?_page=2',
  last: 'http://localhost:3001/posts?_page=5' }

【讨论】:

    【解决方案2】:

    var data = 'link: "<http://localhost:3001/posts?_page=1>; rel="first", <http://localhost:3001/posts?_page=2>; rel="next", <http://localhost:3001/posts?_page=5>; rel="last""'
    
    var linkRegex = /\<([^>]+)/g;
    var relRegex = /rel="([^"]+)/g;
    var linkArray = [];
    var relArray = [];
    var finalResult = {};
    var temp;
    while ((temp = linkRegex.exec(data)) != null) {
        linkArray.push(temp[1]);
    }
    while ((temp = relRegex.exec(data)) != null) {
        relArray.push(temp[1]);
    }
    
    finalResult = relArray.reduce((object, value, index) => {
        object[value] = linkArray[index];
        return object;
    }, {});
    
    console.log(finalResult);

    【讨论】:

    • var linkRegex = /\&lt;([^;]+)/g; 应该是var linkRegex = /\&lt;([^&gt;]+)/g;
    • @TarunLalwani 是的,你是对的,我拼错了谢谢。
    猜你喜欢
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 2010-09-23
    • 2013-08-23
    • 1970-01-01
    • 2015-12-13
    • 2012-08-30
    相关资源
    最近更新 更多