yq-blog
使用 React 和 Koa 实现了一个博客系统,该项目依赖于 语雀 提供的接口来实现。
演示地址: guozeling.cn/
项目地址: github.com/zaleGZL/yq-…
语雀开发者文档: yuque.com/yuque/devel…
安装方法
-
在 语雀 创建知识库,并设置权限为公开
-
将该项目下载到本地
# 下载项目至本地 git clone https://github.com/zaleGZL/yq-blog cd yq-blog # 安装依赖包 yarn 复制代码
-
打开
src
目录下面的constants.js
文件并修改相应的值// 修改以下信息 export default { TITLE: "ZALE'S BLOGS", // 页面显示的标题 SUB_TITLE: 'Front end & Node.js', // 页面显示的子标题 YUQUE_USER_NAME: 'guozeling', // 在语雀上的用户名 YUQUE_KNOWLEDGE_LIB: 'blog', // 在语雀上用来作为博客的知识库名称 GITHUB: 'https://github.com/zaleGZL' // 自己的 github 地址 } 复制代码
-
修改
public
目录下面的index.html
,可以修改页面的 title, 更换图标等等 -
构建生产环境版本的代码
yarn run build 复制代码
-
打开
server
目录下的blogApiRouter
文件并修改相应的值并设置 token// 语雀相关设置 // 请修改这里的配置 const YUQUE_USER_NAME = 'guozeling' // 在语雀上的用户名 const YUQUE_KNOWLEDGE_LIB = 'blog' // 在语雀上用来作为博客的知识库名称 const TOKEN = '' // 在语雀的设置个人资料里查看 设置token可以使得每小时调用接口次数上限增加到5000 复制代码
-
本地运行
node server/app.js 复制代码
-
接下来你可以把这个项目部署到你的服务器上
如何使用 axios 在 Koa 上对 API 进行代理,并且对数据进行缓存
// 由于接口调用数量有限制,所以使用缓存
const blogListCache = {
time: +new Date(),
isValid: false,
data: []
}
// 缓存时间(单位为毫秒)
const CACHE_TIME = 30000
// 代理获取博客列表信息
blogApiRouter.get('/bloglist', async ctx => {
const now = +new Date()
// 可以使用缓存的资源
if (
now - blogListCache.time <= CACHE_TIME &&
blogListCache.isValid === true
) {
return (ctx.body = { data: blogListCache.data })
}
await axios
.get(
`https://yuque.com/api/v2/repos/${YUQUE_USER_NAME}/${YUQUE_KNOWLEDGE_LIB}/toc`,
{
headers: {
'User-Agent': 'personalBlog',
'X-Auth-Token': TOKEN
}
}
)
.then(response => {
// 设置缓存信息
blogListCache.time = +new Date()
blogListCache.isValid = true
blogListCache.data = response.data.data
ctx.body = response.data
})
.catch(error => {
console.log(error.message)
ctx.response.status = 404
ctx.response.body = {
status: 'fail'
}
})
})
复制代码