# 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 基本关系 ![blog1.1](C:\Users\cxj\Downloads\blog1.2.png) #### 2.2.2 拓展模块 ![setting](C:\Users\cxj\Downloads\setting.svg) ### 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. 未来展望