# myblog
**Repository Path**: cxjjqq/myblog
## Basic Information
- **Project Name**: myblog
- **Description**: 基于express+art-template的简易练习博客
- **Primary Language**: JavaScript
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-01-30
- **Last Updated**: 2021-08-31
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 1. 目录结构
- app.js ——程序入口文件
- config.json——后台配置json文件
- setting.json——网站基本信息配置文件
- routers——路由目录文件
- authRouter.js——验证个人信息相关路由
- categoryRouter.js——分类相关路由
- mainRouter.js——主页面相关的路由
- personRouter.js——个人管理页面相关路由
- adminRouter.js——管理员页面相关路由
- views——页面的模板目录
- index.html——主页。
- article.html——文章详情页面
- person.html——个人管理后台页面
- edit.html——文章编辑页面
- admin.html——后台管理页面
- message.html——留言板页面
- public——开放资源存储目录
- css——css资源相关
- js——js资源相关
- tools——工具相关目录
- dbTools.js——数据库相关的工具集
- tools.js——其他无分类的工具集
- log.js——日志工具
- layout——一些基本布局目录
- basic.html——最基本的布局页面
- index_layout.html——主页面基本布局页面
- partial——一些常用组成部分目录
- slidebar_particial.html——侧边栏组件
## 2. 数据库设计
### 2.1需求分析
#### 2.1.1 主页模块
1. 主页面能显示他的大类以及大类下边的小类,点击小类能显示全部小类下的信息,点击大类能显示全部小类并按小类的热度进行排名。
2. 主页能通过日历的形式显示时间,并且能通过时间选择显示该时间下的日志。
3. 有搜索框,能进行模糊匹配。
4. 对于一定文章的数目能进行分页处理。
#### 2.1.2 登陆模块
1. 能进行游客登陆。
2. 能进行后台管理登陆。
#### 2.1.3 权限设置
1. 游客登陆后才能进行评论和留言。
2. 后台管理能管理文章以及处理评论,留言,日志,文章等信息,能编写文章,管理游客,对游客的留言以及评。论进行管理进行管理,能添加和删除游客。
#### 2.1.4 文章模块
1. 文章包括类型,阅读数量,文章下包含多个评论。
2. 在写文章提交的时候可以对文章添加分类。
3. 文章能通过后台进行修改,删除等。
4. 文章支持markdown编辑,文章中能有回到顶部按钮
5. 文章那个可以是原创也可以是外部的链接
#### 2.1.5 留言板块
1. 能通过markdown进行编写留言
2. 留言模块能显示名称并且是有特色的板块
#### 2.1.6 评论模块
1. 支持markdown进行编辑
2. 能引用个人评论并回复
#### 2.1.7 游客管理页面
1. 具有游客身份的可以看到自己评论的文章
2. 能在游客管理页面看到别人的回复,能通过点击去到相应的文章那个
3. 能修改和删除自己的评论
#### 2.1.8 后台管理
1. 文章内容管理。能对文章进行增删改查
2. 能对游客的评论和留言进行删除和查看和限制评论权限
3. 能对日志进行查看
4. 能进行基本设置
#### 2.1.9 分类管理
1. 能添加分类,仅仅能添加以及分类和二级分类
#### 2.1.10 扩展需求
- [ ] 能在头部扩展模块
- [ ] 能进行其他方式登陆
### 2.2 概念模型
#### 2.2.1 基本关系

#### 2.2.2 拓展模块

### 2.3 逻辑模型
#### 2.3.1 基本关系
1. 用户(用户id, 用户头像,昵称,密码, 账户创建时间,上一次登陆时间)
2. 管理员(用户id)
3. 文章(文章id, 标题,浏览人数,文章内容,是否为草稿,分类id, 文章类型, 创建时间,上一次修改时间)
4. 分类(分类id,名称,创建时间,顶级分类)
5. 评论(文章id,评论人id,评论内容,评论时间)
6. 留言(用户id,留言内容,留言时间)
7. 日志(操作员id,操作类型,操作模块,完成操作的时间,操作描述)
### 2.4 物理结构设计
#### 2.4.1 user表
| 字段 | 类型 | 长度 | 能否为空 | 是否主键组成 | 是否外键组成 | 约束 | 默认值 | 备注 |
| :-------------: | :------: | :--: | :------: | :----------: | :----------: | :-----------------: | :----: | ---- |
| _id | varchar | 255 | 否 | 是 | | | | |
| avatar | varchar | 255 | | | | | 待定 | |
| username | varchar | 12 | 否 | 否 | | | | |
| password | varchar | 13 | 否 | | | 长度大于4位小于13位 | | |
| create_time | datetime | | | | | | | |
| last_login_time | datetime | | | | | | | |
#### 2.4.2 article表
| 字段 | 类型 | 长度 | 能否为空 | 是否主键组成 | 是否外键组成 | 约束 | 默认值 | 备注 |
| :---------: | :------: | :--: | :------: | :----------: | :----------: | :--: | :----: | :------: |
| _id | varchar | 255 | 否 | 是 | | | | |
| title | char | 38 | 否 | | | | | |
| vNum | int | | | | | | 0 | |
| content | text | | | | | | | |
| isDraft | tinyint | | | | | | 1 | |
| category | varchar | 255 | | | | | | 文章分类 |
| type | tinyint | | | | | | | 文章类型 |
| create_time | datetime | | | | | | | |
| modify_time | datetime | | | | | | | |
#### 2.4.3 category表
| 字段 | 类型 | 长度 | 能否为空 | 是否主键组成 | 是否外键组成 | 约束 | 默认值 | 备注 |
| :---------: | :------: | :--: | :------: | :----------: | :----------: | :--: | :----: | :----------------------------------------: |
| _id | varchar | 255 | 否 | 是 | | | | |
| father | varchar | 255 | | | | | | 是否为顶级分类,不是顶级分类就填入分类的id |
| name | varchar | 16 | | | | | | 名称 |
| create_time | datetime | | | | | | | |
#### 2.4.4 comment表
| 字段 | 类型 | 长度 | 能否为空 | 是否主键组成 | 是否外键 | 约束 | 默认值 | 备注 |
| :-----: | :-------: | :--: | :------: | :----------: | :------: | :--: | :----: | :------: |
| aid | varchar | | 否 | 是 | 是 | | | |
| uid | varchar | | | 是 | 是 | | | |
| content | varchar | 250 | | | | | | |
| time | timestamp | | | | | | | 评论时间 |
| good | int | | | | | | | 点赞人数 |
#### 2.4.5 leavemsg表
| 字段 | 类型 | 长度 | 能否为空 | 是否主键组成 | 是否外键 | 约束 | 默认值 | 备注 |
| :-----: | :------: | :--: | :------: | :----------: | :------: | :--: | :----: | :------: |
| _id | varchar | 255 | 否 | 是 | | | | |
| uid | varchar | 255 | 否 | | 是 | | | |
| content | varchar | 100 | | | | | | |
| time | datetime | | | | | | | 留言时间 |
#### 2.4.6 log表 日志(操作员id,操作类型,操作模块,完成操作的时间,操作描述)
| 字段 | 类型 | 长度 | 能否为空 | 是否主键组成 | 是否外键 | 约束 | 默认值 | 备注 |
| :------------: | :------: | :--: | :------: | :----------: | :------: | :--: | :----: | :--------------------: |
| _id | varchar | 255 | 否 | 是 | | | | |
| uid | varchar | | 否 | | 是 | | | 操作员id |
| op_type | varchar | 10 | 否 | | | | | 操作类型。例如删除修改 |
| op_module | varchar | 20 | | | | | | 操作的模块 |
| time | datetime | | | | | | | 操作时间 |
| op_descroption | varchar | 100 | | | | | | 操作的描述 |
#### 2.4.7 reply表
| 字段 | 类型 | 长度 | 能否为空 | 是否主键组成 | 是否外键 | 约束 | 默认值 | 备注 |
| :-----: | :-------: | :--: | :------: | :----------: | :------: | :--: | :----: | :----------------------: |
| uid | varchar | 255 | 否 | | | | | 主评论的评论人的id |
| rid | varchar | 255 | 否 | | | | | 评论人的id |
| redid | varchar | 255 | 否 | | | | | 被回复的评论的评论人的id |
| aid | varchar | 255 | 否 | | | | | 文章那个id |
| content | varchar | 250 | 否 | | | | | 发表的内容 |
| time | timestamp | | | | | | | 发表的时间 |
| _id | varchar | 255 | 是 | | | | | 回复记录的id |
### 3. 视图设计
#### 3.1.1 主页面-》文章视图 indexarticles 引用article表
| 字段 | 备注 |
| :-----: | :--------------: |
| aId | 文章id |
| title | 文章标题 |
| vNum | 点击的人数 |
| cId | 所属分类的id |
| cName | 所属的分类的名称 |
| isDraft | 是否为草稿 |
| type | 文章类型 |
| uId | 作者的id |
#### 3.1.2 管理页面-》我的博客的视图articlesrecord引用article表
| 字段 | 备注 |
| :---------: | :--------------: |
| aId | 文章id |
| title | 文章标题 |
| vNum | 点击的人数 |
| cId | 所属分类的id |
| cName | 所属的分类的名称 |
| isDraft | 是否为草稿 |
| type | 文章类型 |
| uId | 作者的id |
| create_time | 文章创建时间 |
| modify_time | 文章修改时间 |
## 4. 路由设计
#### 3.1 验证相关路由
| 方法 | 请求地址 | 方式 | 参数 | 参数解析 | 作用&说明 | 返回值 | 返回值解析 |
| :--: | :-------: | ---- | :------------------------: | :-----------------------------------------: | :-------: | :---------------------: | :------------------------------------: |
| POST | /login | 异步 | {username,
password} | {用户账号:字符串,
用户密码:字符串} | 登陆认证 | {errCode,
errMsg } | {错误代码:数字
错误信息:字符串} |
| POST | /register | 异步 | {username,
password} | {账号:字符串,密码:字符串} | 注册账号 | {errCode,
errMsg} | {错误代码:数字
错误信息:字符串} |
| GET | /logout | 同步 | 无 | 无 | 退出登陆 | 无 | 无 |
#### 3.2 分类相关路由
| 方法 | 请求地址 | 方式 | 参数 | 参数解析 | 作用&说明 | 返回值 | 返回值解析 |
| :--: | :-------------------------: | ---- | :--: | :------------------: | :--------------------------------------------------: | :-------------------------------: | :----------------------------------------------------------: |
| GET | /category/:catelogy | 异步 | 无 | 无 | 获取分类下所有的文章信息。这时候默认当前分页是第一页 | [{aLink, title, catelogy, vNum}] | {文章链接:字符串
标题:字符串,分类:字符串,查看人数} |
| GET | /category/:catelogy?p=1 | 异步 | p | 表示特定分类下多少页 | 分页 | [{aLink, title, catelogy, vNum}] | 该分页下的文章信息 |
| GET | /category/:catelogy?t= | 异步 | t | 时间 | 表示查询某个特定分类在某个时间内完成的所有文章 | [{aLink, title, catelogy, vNum}] | 属于该时间下的该分类该分页下的文章信息 |
| GET | /category/allarticle?p= | 异步 | p | 表示全部分类下多少页 | 分页 | [{aLink, title, catelogy, vNum}] | 该分页下的文章信息 |
| GET | /category/allarticle?t=&p= | 异步 | t | 时间 | 表示查询全部分裂在某个时间内完成的所有文章 | [{aLink, title, catelogy, vNum}] | 属于该时间下的全部分类该分页下的文章信息 |
| GET | /category/allcategory | 异步 | | | 获取所有的分类 | | 所有分类的列表 |
#### 3.3 主页相关路由
| 方法 | 请求地址 | 方式 | 参数 | 参数解析 | 作用&说明 | 返回值 | 返回值解析 |
| :--: | :------: | ---- | :--: | :------: | :--------------: | :----: | :--------: |
| GET | / | 同步 | | | 渲染主页 | | |
| GET | /lmsg | 同步 | | | 渲染留言板 | | |
| GET | /about | 同步 | | | 渲染关于个人信息 | | |
#### 3.4 个人页面路由
| GET | /person | 同步 | | | 渲染个人博客信息管理页面 | | |
| :--: | :----------------------: | ---- | :--------------: | :----: | :----------------------: | :--: | :----------------------------: |
| GET | /article/edit | 同步 | | | 渲染编辑页面 | | |
| GET | /article/edit?aid= | 同步 | a | 文章id | 用于修改文章信息 | | |
| GET | /article/del?a= | 异步 | a | 文章id | 用于删除文章 | | |
| GET | /article/my | 同步 | | | 查看自己的所有文章 | | |
| GET | /article/edit/:articleId | 异步 | | | 用来获取用于编辑的内容 | | 返回编辑的文章那个的标题和内容 |
| POST | /article/edit | 异步 | 文章的标题和内容 | | 用于创建新的文章 | | |
#### 3.5 管理员页面信息
| GET | /admin | 同步 | | | 渲染管理员页面,初始页面是日志页面 | | |
| :--: | :---------------------------: | ---- | :--: | :------: | :--------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: |
| GET | /admin/log | 同步 | | | 查看日志信息。默认当前是第一页 | [{operator, op_type, op_module, op_time, op_description}] | {操作员账号: 字符串, 操作类型:字符串,操作的模块:字符串,操作时间:字符串,操作描述:字符串} |
| GET | /admin/log?p= | 异步 | | | 获取特定页数下的文章 | | |
| GET | /admin/articles 可用/all | 同步 | | | 获取所有文章信息,默认当前是第一页 | [{articleId, title, catelogy, vNum, createTime, modifyTime}] | {文章id:字符串, 标题:字符串,分类:字符串,查看人数:整型,创建时间:字符串,上一次修改时间:字符串} |
| GET | /admin/articles?p=可用/all?p= | 异步 | p | 当前页数 | 获取特定页下的文章 | | |
| GET | /admin/users | 同步 | | | 获取所有的游客信息 | [{uId, username, createTime, p_login_time}] | {用户id:字符串,用户名,用户创建时间,用户上一次登陆时间} |
| GET | /admin/user/add | 异步 | | | 添加用户 | {errcode, errMsg} | {错误码:字符串,错误信息:字符串} |
| GET | /admin/user/del | 异步 | | | 删除用户 | {errcode, errMsg} | {错误码:字符串,错误信息:字符串} |
| GET | /admin/config | 同步 | | | 渲染配置信息页面 | | |
| GET | /admin/config/save | 异步 | | | 保存配置信息 | {errcode, errMsg} | {错误码:字符串,错误信息:字符串} |
| | | | | | | | |
#### 3.6 辅助模块路由
| 方法 | 请求地址 | 方式 | 参数 | 参数解析 | 作用&说明 | 返回值 | 返回值解析 |
| :--: | :------: | ---- | :--: | :------: | :-------: | :----------------------------------------------------------: | :--------: |
| POST | /uimg | 同步 | | | 图片上传 | { success : 0 \| 1, // 0 表示上传失败,1 表示上传成功 message : "提示的信息,上传成功或上传失败及错误信息等。", url : "图片地址" // 上传成功时才返回} | |
#### 3.7 文章路由
| 方法 | 请求地址 | 方式 | 参数 | 参数解析 | 作用&说明 | 返回值 | 返回值解析 |
| :--: | :---------: | ---- | :---------------------: | :----------------------------------------------------------: | :-------------------------------------: | :----: | :-------------------------------: |
| GET | /comments | 异步 | aid | 文章的id | 渲染主页 | | 评论列表 |
| POST | /comment | 异步 | {aid,content} | aid:文章id,content:发表的内容 | 发表评论 | | {code:状态代码, message:描述信息} |
| POST | /reply | 异步 | {uid,aid,content,redid} | {uid:主评论人的id,aid:文章的id,content:回复的内容,redid:被回复的id} | 对评论做回复 | | {code:状态代码, message:描述信息} |
| GET | /good/:type | 异步 | aid | 文章id | 点赞增量,type表示是点赞评论还是点赞回复 | | {code,message} |
### 5. 技术组成
### 6. 未来展望