前后端分离+服务端渲染的博客系统. 基于Vue2、Koa2、MongoDB、Redis.
A blog system. Based on Vue2, Koa2, MongoDB and Redis.
前后端分离 + 服务端渲染的博客系统, 前端 SPA + 后端 RESTful 服务器
Demo
Table of Contents
TODO
构建与部署
前置
- Node v6
- pm2
- MongoDB
- Redis
server
博客的提供RESTful API的后端
front
博客的前台单页, 支持服务端渲染
admin
博客的后台管理单页
后端 RESTful API
说明
后端服务器默认开启在 3000 端口, 如不愿意暴露 IP, 可以自行设置 nginx 代理, 或者直接使用前端两个单页的代理前缀
/proxyPrefix
例如, demo的API根目录如下:
其中,
:modelName
为模型名, 总计如下6个模型post
theme
tag
category
option
user
:id
为指定的文档ID, 用以对指定文档进行 CRUDHTTP 动词
支持如下五种:
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 操作获得 Token
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, 否则请求将被服务器拒绝撤销 Token
将
header
中的authorization
设置为服务器下发的 token, 即可撤销此 tokenToken说明
Token 默认有效期为获得后的一小时, 超出时间后请重新请求 Token
如需自定义有效期, 请修改服务端配置文件中的
如需自定义有效期, 请修改服务端配置文件中的
tokenExpiresIn
字段, 其单位为秒查询
服务器直接允许对
user
模型外的所有模型的 GET 请求, 不需要验证 Token
为了直接通过 URI 来进行 mongoDB 查询, 后台提供六种关键字的查询:
conditions,
select,
count,
sort,
skip,
limit
条件(conditions)查询
类型为JSON, 被解析为对象后, 直接将其作为
mongoose.find
的查询条件查询所有文档
查询title字段为'关于'的文档
查询指定id的文档的上一篇文档
select查询
类型为JSON, 用以拾取每条数据所需要的属性名, 以过滤输出来加快响应速度
查询title字段为'关于'的文档的建立时间和更新时间
count查询
获得查询结果的数量
查询文档的数量
sort查询
查询所有文档并按id倒序
查询所有文档并按更新时间倒序
skip 查询和 limit 查询
查询第2页的文档(每页10条)并按时间倒叙
新建
需要验证Token
Body中为用来新建文档的JSON数据
每个模型的具体字段, 可以查看该模型的Schema定义来获得
替换
需要验证Token
:id
为查询到的文档的_id
属性, Body中为用来替换该文档的JSON数据更新
需要验证Token
:id
为查询到的文档的_id
属性, Body中为用来更新该文档的JSON数据
更新操作请使用
PATCH
而不是PUT
删除
需要验证 Token
删除指定 ID 的文档
No comments:
Post a Comment