用axios(promise)获得cnode首页的第一条精华帖用户详情

一、思路:我们要想读取cnode首页的信息,应该先去看cnode提供的api(接口文件)

cnode接口文档链接

看文档我们需要的是以下两个:


用axios(promise)获得cnode首页的第一条精华帖用户详情_第1张图片
图片1.png

图片2.png

二、观察图片二,我们看到“get /user/:loginname 用户详情”基本就是我们想要的,但是参数loginname,我们没有,需要去获取,这时我们看一下用一下图片一的get方式,看一下结果是怎样的。

我们按照图片一的get方式,https://cnodejs.org/api/v1/topics?page=1&tab=good&limit=1&mdrender=false,看一下连接得到的结果。

用axios(promise)获得cnode首页的第一条精华帖用户详情_第2张图片
图片.png

OK,结果里有我们想要的longinname.

三、写代码。
(1)我们先引入axios

var axios = require('axios');

(2)既然要用promise,我们来验证axios.get是不是promise函数


用axios(promise)获得cnode首页的第一条精华帖用户详情_第3张图片
代码.png

结果是:
结果.png

OK,可以用promise.

(3)获取loginname,按照图片2,我们的get请求结果,更新代码如下:

用axios(promise)获得cnode首页的第一条精华帖用户详情_第4张图片
图片.png

得到结果:
图片.png

需要写两个函数,实现该功能,一个是获得用户名loginname的函数function readTopics(),一个是获得用户详情的函数function readUserInfo(name),他需要我们上一部得到的name当作参数。

var axios = require('axios');//引入axios
 /获取用户loginname/
function readTopics() {
    return axios.get(
    'https://cnodejs.org/api/v1/topics?page=1&tag=good&limit=1&mdrender=false'
    )
   .then(response => {
      return response.data.data[0].author.loginname;//name
    })
   .then(name=>{
     getUserInfo(name);
    })
    .catch(console.log);
   }
function getUserInfo(name){
    return axios.get('https://cnodejs.org/api/v1/user/'+name)
    .then(response => {
     console.log(response.data.data);
     })
    .catch(console.log);
     }
readTopics();

以上运行结果:
用axios(promise)获得cnode首页的第一条精华帖用户详情_第5张图片
图片.png

但是对于函数式编程,感觉这样远远不够,还有待改进。

response.data.data[0].author.loginname,这样容易出错,把response.data单独一个函数。会更好一点。

var readData = function(response) {
   return response.data;
}//这里就是函数式编程的精髓,一定要真正理解!
function readTopics() {
  axios.get('https://cnodejs.org/api/v1/topics?page=1&tag=good&limit=1&mdrender=false') // 每一步返回的一定都是Promise
  .then(readData)
  .then(result => {
    return result.data[0].author.loginname // name
    })
  .then(readUserInfo)
  .catch(console.log);
}
function readUserInfo(name) {
axios.get('https://cnodejs.org/api/v1/user' + name)
  .then(readData)
  .then(console.log)
}
readTopics();

既然 每一步返回的都是 Promise 对象,那么不就可以写成下面这样?

var readData = function(response) {
  return response.data;
}
function readFirstName() {
  return axios.get('https://cnodejs.org/api/v1/topics?page=1&tag=good&limit=1&mdrender=false') // 每一步返回的一定都是Promise
  .then(readData)
  .then(result => {
    return result.data[0].author.loginname
    })
  .catch(console.log);
}
function readUserInfo(name) {
 return axios.get('https://cnodejs.org/api/v1/user/' + name)
  .then(readData)
  .then(result=>{
   console.log(result.data);
    return result.data;
   })
   .catch(console.log);
}
readFirstName()
.then(readUserInfo)
.then(console.log);

图片a.png

光看图片a就很清楚功能,先找到第一名字,在取用户信息,打印出来,功能一目了然。

你可能感兴趣的:(用axios(promise)获得cnode首页的第一条精华帖用户详情)