目 录
摘 要 I
Abstract II
- 引 言 1
1.1. 项目背景 1
1.1.1. 什么是博客 1
1.1.2. 博客技术的现状 1
1.1.3. 为什么是NodeJS 1
1.2. 系统开发的意义 2
1.2.1. 让更多人接触NodeJs 2
1.2.2. 创新 3
1.2.3. 博客的价值 3
1.3. 系统开发目标 4
1.3.1. 可用性 4
1.3.2. 可操作性 4
1.3.3. 可扩展性 4
1.4. 系统介绍 5
1.5. 系统开发方法 5
1.6. 论文组织结构 6 - 系统分析 7
2.1. 可行性分析 7
2.2. 需求分析 7
2.2.1. 注册界面 8
2.2.2. 登录界面 10
2.2.3. 文章管理界面 11
2.2.4. 评论管理 12
2.3. 数据分析 12
2.4. 数据流图 13
2.5. 性能规定 14
2.5.1. 性能分析 14
2.5.2. 安全性需求分析 14
2.5.3. 客户端的性能需求 14 - 相关技术 15
3.1. NodeJS 15
3.2. ExpressJS 18
3.3. MongoDB数据库 19
3.4. EJS 22
3.5. 网络架构体系 22
3.6. MVC介绍 23 - 系统设计 26
4.1. 数据库设计 26
4.1.1. 用户表users 26
4.1.2. 文章表posts 26
4.1.3. 评论表comments 27
4.2. 系统架构 27
4.2.1. 视图层 27
4.2.2. 业务逻辑层 28
4.2.3. 数据持久层 29
4.2.4. 其他业务逻辑 30
4.3. 系统的部署安装与配置 31
4.3.1. 安装要求 31
4.3.2. 安装Nodejs和MongoDB 31
4.3.3. 本系统的获取和安装 31
4.3.4. 系统配置 31 - 系统测试与运行 32
5.1. 白盒测试 32
5.1.1. 测试覆盖率 35
5.2. 黑盒测试 36
5.2.1. 文章界面测试 36
5.2.2. 后台管理 37
5.2.3. 注册和登录 38 - 项目部署 40
6.1. 云数据库 40
6.2. pm2 40
6.3. 云服务器 42
参 考 文 献 43
谢 辞 44
2.系统分析
这一章节将会对系统的可行性进行分析,并对需求和数据进行分析。对博客系统进行了整体的功能介绍与各具体模块功能的限定,并且用数据图等对这些分析过程进行说明
2.1. 可行性分析
可行性分析是对于项目的各项功能和要完成这一系统需要的各种条件的分析,比如盈利状况、技术条件、资源条件、市场前景等,从技术、社会发展和经济状况等方面进行分析和调研,对项目完成后的经济效益和环境影响进行评估,对于项目是不是应该开展和对它的开发方式提出建议的一种总体的分析方法。可行性分析是为了确保投资成果而在项目开展以前就从各个方面对这一项目进行系统的分析。它的主要任务是为了从经济角度进行系统分析,合理分配资源,实现社会价值和经济价值。
由于本系统是博客系统,它具有一定的公益性质,因此本文将重点分析其在技术方面可行性。从系统的开发技术角度对其进行分析。
本博客系统的大量底层功能都是直接通过Express框架中提供的大量的中间键实现的,比如HTTP模块,session中间键,路由设置,错误提示,模板渲染,端口监听,静态资源管理等。这些框架给出的功能很全面,足够我们开发一个博客系统这样的应用了。
对于这些模块的使用,我们只需要借助npm包管理工具,下载这些模块,并在js文件的开头引入这些模块即可,十分方便。因此,本系统在可行性上是可以保证的。
2.2. 需求分析
需求分析是在开发项目之前,对于项目应当事先怎样的功能进行系统的分析,了解系统在开发过程中应当实现怎样的目标,了解用户对这一系统有着怎样的要求,从而正确认识到系统中各个模块的功能。
图2.2-1是系统功能的结构图。它包括:注册操作、登录操作、主界面及留言界面
图2.2-1 系统功能结构图
2.2.1.注册界面
本系统针对三种角色:用户,游客与管理员。用户可以发布博文和给他人留言,也可以对自己已经发布过的文章进行修改和删除。游客的权限相对较低,只拥有查看博客文章和留言内容的权限,既不能发表文章,也不能发布留言。但是游客可以进行注册操作,总而将权限提升至用户权限,http://www.biyezuopin.vip/onews.asp?id=11878从而实现管理自己博客的功能。管理员是一种特殊的权限,它对其他用户的文章和留言都有删除操作(但是没有修改权限),且用户不能通过任何操作将自己的权限提升至管理员,它是博客内容的管理者,可以对非法的内容进行清理。
<%- include('header') %>
<div class="ui grid">
<div class="four wide column"></div>
<div class="eight wide column">
<form class="ui form segment" method="post">
<div class="field required">
<label>用户名</label>
<input placeholder="用户名" type="text" name="name">
</div>
<div class="field required">
<label>密码</label>
<input placeholder="密码" type="password" name="password">
</div>
<input type="submit" class="ui button fluid" value="登录">
</form>
</div>
</div>
<%- include('footer') %>