A blog system. Based on Vue2, Koa2, MongoDB and Redis
前后端分离 + 服务端渲染的博客系统, 前端 SPA + 后端 RESTful 服务器
前端:https://smallpath.me
后台管理截图:https://smallpath.me/post/blog-back-v2
- 前台单页
- disqus评论
- vue1.0升级至vue2.0
- vuex单向数据流
- 服务端渲染
- 客户端谷歌统计
- 服务端sitemap定时任务
- 服务端rss定时任务
- 组件级缓存
- Loading组件
- 侧边栏图片
- 服务端谷歌统计
- 全局404页面
- 文章toc
- 页面meta
- 按需分块加载
- service worker缓存所有资源
- SSR服务端直连mongo
- 自制axios以减小打包大小
- 自制vuex以减小打包大小
- SSR服务端不可用时进行降级
- SSR数据获取增加RPC形式
- blogPager增加查看更多链接
- footer显示备案号
- 修改倒序查询条件
- 后台管理单页
- vue1.0升级至vue2.0
- 使用element ui
- 七牛云图片上传
- 文章toc的生成与编辑
- 草稿的自动生成与手动恢复
- 上传图片后指定img标签的高度以避免闪烁
- 扫描所有文章,指定img高度
- 文章增加标题图片的编辑功能
- 修改倒序查询条件
- RESTful服务器
- RESTful添加select字段过滤
- 标签及分类移至文章中
- 七牛access_token下发及鉴权
- lint
- 配合redis提供RPC服务
- RESTful的排序自定义
- 按天备份
- 部署文档
- API文档
- Docker
- CI
运行本项目代码之前请确保安装以下软件:
- Node.js v6 +
- MongoDB
- Redis
- pm2
本说明以 macos 为例
官网下载安装包直接安装
# 安装
brew install mongodb
# 启动
mongod -dbpath=your/path# 安装
brew install redies
# 启动
redis-server /usr/local/etc/redis.conf本项目服务核心分为三大部分:
- server : 提供 api 服务,也是博客的核心服务
- fornt : 前端显示界面,可以自己进行定制
- admin : 博客管理模块
相关说明请点击对应文件夹或者直接点击 wiki 页面,安装过程中如果遇到困难欢迎去提交 issue.
# 克隆项目
git clone https://github.com/Smallpath/Blog.git
# 进入项目目录
cd Blog
# 打包docker 镜像文件
docker build -t blog .
# 运行 镜像
docker run -it --rm -p 3000:3000 -p 8080:8080 blog默认用户名密码 coucou
后端服务器默认开启在 3000 端口, 如不愿意暴露 IP, 可以自行设置 nginx 代理, 或者直接使用前端两个单页的代理前缀/proxyPrefix
例如, demo的API根目录如下:
其中, :modelName为模型名, 总计如下6个模型
post
theme
tag
category
option
user
:id为指定的文档ID, 用以对指定文档进行 CRUD
支持如下五种:
GET //查询
POST //新建
PUT //替换
PATCH //更新部分属性
DELETE //删除指定ID的文档有如下两个规定:
- 对所有请求
- header中必须将
Content-Type设置为application/json, 需要body的则body必须是合法 JSON格式
- header中必须将
- 对所有回应
- header中的
Content-Type均为application/json, 且返回的数据也是 JSON格式
- header中的
服务器直接允许对user模型外的所有模型的GET请求
user表的所有请求, 以及其他表的非 GET 请求, 都必须将 header 中的authorization设置为服务器下发的 Token, 服务器验证通过后才会继续执行 CRUD 操作
body格式如下:
{
"name": "admin",
"password": "testpassword"
}
成功, 则返回带有token字段的 JSON 数据
{
"status": "success",
"token": "tokenExample"
}
失败, 则返回如下格式的 JSON 数据:
{
"status": "fail",
"description": "Get token failed. Check name and password"
}
获取到token后, 在上述需要 token 验证的请求中, 请将 header 中的authorization设置为服务器下发的 Token, 否则请求将被服务器拒绝
将header中的authorization设置为服务器下发的 token, 即可撤销此 token
Token 默认有效期为获得后的一小时, 超出时间后请重新请求 Token
如需自定义有效期, 请修改服务端配置文件中的tokenExpiresIn字段, 其单位为秒
服务器直接允许对user模型外的所有模型的 GET 请求, 不需要验证 Token
为了直接通过 URI 来进行 mongoDB 查询, 后台提供六种关键字的查询:
conditions,
select,
count,
sort,
skip,
limit
类型为JSON, 被解析为对象后, 直接将其作为mongoose.find的查询条件
GET https://smallpath.me/proxyPrefix/api/post?conditions={"title":"关于"}
类型为JSON, 用以拾取每条数据所需要的属性名, 以过滤输出来加快响应速度
获得查询结果的数量
GET https://smallpath.me/proxyPrefix/api/post?conditions={"type":0}&count=1
为了查询方便, sort=1代表按时间倒序, 不使用sort则代表按时间正序
GET https://smallpath.me/proxyPrefix/api/post?limit=10&skip=10&sort=1
需要验证Token
Body中为用来新建文档的JSON数据
每个模型的具体字段, 可以查看该模型的Schema定义来获得
需要验证Token
:id为查询到的文档的_id属性, Body中为用来替换该文档的JSON数据
需要验证Token
:id为查询到的文档的_id属性, Body中为用来更新该文档的JSON数据
更新操作请使用PATCH而不是PUT
需要验证 Token
删除指定 ID 的文档