我将为我的投资组合创建一个服务层实现示例,以创建我的仪表板,显示有关我的 github 和 stackoverflow 配置文件的一些静态信息,为此,我在项目根目录中创建了一个名为 services 的文件夹:
pages
services
|_AxiosConfig.js
|_GitHubService.js
|_StackoverflowService.js
...
在AxiosConfig.js 文件中,我创建了一个带有其配置的 axios 实例:
import axios from 'axios';
const clientAPI = url =>
axios.create({
baseURL: url,
withCredentials: false,
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
});
export default clientAPI;
然后在我的 GitHubService.js 中,我导入了我习惯于请求的名为 clientAPI 的 axios 实例:
import clientAPI from './AxiosConfig';
const baseURL = 'https://api.github.com';
export default {
getUser(name) {
return clientAPI(baseURL).get('/users/' + name);
},
getRepos(name){
return clientAPI(baseURL).get('/users/' + name+'/repos');
},
getEvents(name,page){
return clientAPI(baseURL).get('/users/' + name+'/events?per_page=100&page='+page);
},
getLastYearCommits(name,repo){
return clientAPI(baseURL).get('/repos/' + name+'/'+repo+'/stats/commit_activity');
}
};
然后在我的页面中我使用asyncData 挂钩来获取我的数据:
import GitHubService from '../../services/GitHubService'
export default {
...
async asyncData({ error }) {
try {
const { data } = await GitHubService.getUser("boussadjra");
const resRepos = await GitHubService.getRepos("boussadjra");
return {
user: data,
repos: resRepos.data
};
} catch (e) {
error({
statusCode: 503,
message: "We cannot find the user"
});
}
}