一、思路:我们要想读取cnode首页的信息,应该先去看cnode提供的api(接口文件)
看文档我们需要的是以下两个:
二、观察图片二,我们看到“get /user/:loginname 用户详情”基本就是我们想要的,但是参数loginname,我们没有,需要去获取,这时我们看一下用一下图片一的get方式,看一下结果是怎样的。
我们按照图片一的get方式,https://cnodejs.org/api/v1/topics?page=1&tab=good&limit=1&mdrender=false,看一下连接得到的结果。
OK,结果里有我们想要的longinname.
三、写代码。
(1)我们先引入axios
var axios = require('axios');
(2)既然要用promise,我们来验证axios.get是不是promise函数
OK,可以用promise.
(3)获取loginname,按照图片2,我们的get请求结果,更新代码如下:
得到结果:
需要写两个函数,实现该功能,一个是获得用户名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();
但是对于函数式编程,感觉这样远远不够,还有待改进。
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就很清楚功能,先找到第一名字,在取用户信息,打印出来,功能一目了然。