基于node.js的个人博客_第1页
基于node.js的个人博客_第2页
基于node.js的个人博客_第3页
基于node.js的个人博客_第4页
基于node.js的个人博客_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于node.js的个人博客第1章绪论1.1课题背景1967年,哈佛大学社会心理学家斯坦利米格尔得出的六度分割理论“任何两个陌生人都可以通过“亲友的亲友”建立联系,他们之间所间隔的人不会超过六个”被公认为是构成SNS存在基础的核心理论,诸多文献当中都采用这种看法。艾瑞公司《中国网络社区研究报告简版(2009)》将社会性网络(社会网络,SocialNetworking:SN)定义为:是指个人之间的关系网络,基于社会网络关系系统思想的网站就是社会性网络网站(SNS网站)。早期社交网络的服务网站呈现为在线社区的形式。用户多通过聊天室进行交流。随着Blog等新的网上交际工具的出现用户可以通过网站上建立的个人主页来分享喜爱的信息。在国外,facebook是覆盖最广的社交网站。不过有些国家也有自己本土的社交网站,一般是年轻人使用。在国内,社交网站一般是以基于特定功能。如:基于各类生活爱好:豆瓣;基于白领和学生用户的交流:人人网;基于信息的快速分享:新浪微博。而博客一般用于在网络上出版、发表和张贴个人文章,并与博友之间进行互动。Node.js是一个划时代的技术,它在原有的Web前端和后端技术的基础上总结并提炼出了许多新的概念和方法,堪称是十多年来Web开发经验的集大成者。Node.js可以作为服务器向用户提供服务,与PHP、Python、RubyonRails相比,它跳过了Apache、Nginx等HTTP服务器,直接面向前端开发。Node.js的许多设计理念与经典架构(如LAMP)有着很大的不同,可提供强大的伸缩能力,以适应21世纪10年代以后规模越来越庞大的互联网环境。1.2目的和意义随着计算机技术的发展和普及,人们对资源共享的需求也在不断地增强。Blog是Weblog的简称,它是继E-mail、BBS、ICQ之后出现的第4种新的生活方式、新的工作方式、新的学习方式和新的网络交流方式。Blog主要应用于3个方面:一是新的人际交流通道;二是以个人为中心的信息摘选和知识管理平台;三是以个人为中心的传播出版资源库。Node采用事件驱动、异步编程。使用Node的开发人员可以根据自己的业务需要来定制相应的回调函数。同时,这些定义的回调函数是异步执行的。Node采用了一系列“非阻塞”库来支持事件循环。其本质就是为文件系统和数据库之类的资源提供接口。充分利用了系统资源,节约了任务之间的等待时间,节省出来的资源可以为其他任务服务。在服务器开发过程中,并发数是一个很大的问题,传统阻塞式的函数会导致资源的浪费和延迟。通过事件机制和非阻塞编程,会大大提高资源利用率。这是使用Node其意义所在。服务端JavaScript:node.js一出现,势必会引发一系列博客应用的开发,本系统便是对此领域的探索。1.3系统开发的相关技术本系统在Windows8下,基于Node0.10.31(具有内建服务器),数据库为MongoDB2.6.9,Express4.10.2框架。1.3.1JavaScript简介近年来,JavaScript在业界的地位一直在稳步上升。一开始它只是被当做检验表单做出花俏效果的“玩具”语言,后来随着DouglasCrockford等人的挖掘以及传道,JavaScript的一些高级模式得以普及。随着Ajax的到来,JavaScript在Web2.0潮流中起到了核心的作用,各种丰富多彩的Ajax库应运而生,扩充了JavaScript本来不具有的功能,如方便的DOM查询、操作、命名空间、模块空间、模块管理、依赖管理、面向对象编程。现在使用较多的JavaScript库有:jQuery,Yahoo!UI,Dojo,ExtJS,Mootools,Prototype等。几乎每个库都有自己成熟的开发社区和一批追随使用者。另外,浏览器MozillaFirefox,GoogleChrome,AppleSafari的JavaScript解析速度比起以前的老式IE的JavaScript解析器速度提升非常之大。特别是V8引擎,速度更是遥遥领先。而在服务器编程领域,大规模并发的需求变得越来越大,JavaScript事件驱动的异步机制使得它非常适合这项任务。因此,node.js诞生。虽然目前node.js的生态环境已经逐步完善,与业界的各种工具的对应接口模块也逐渐被完成,不过用node写成的工具目前还比较少,其中一个是Blog系统。1.3.2Node.js简介Node.js是什么?Node.js是一个\o"事件驱动"事件驱动\o"I/O"I/O服务端\o"JavaScript"JavaScript环境,基于\o"Google"Google的\o"V8(JavaScript引擎)"V8引擎。目的是为了提供撰写可扩充网络程序,如Web服务。与一般\o"JavaScript"JavaScript不同的地方,Node.js并不是在\o"Web浏览器"Web浏览器上运行,而是一种在服务器上运行的JavaScript。Node.js旨在解决什么问题?Node公开宣称的目标是“旨在提供一种简单的构建可伸缩网络程序的方法。”在当前的服务器程序开发中存在这一个问题:通常服务器程序开发所使用的语言主要是Java和PHP,在这类语言中,每个连接都会生成一个新的线程,而每个新的线程可能需要配套2MB的内存。假设在一个拥有8GBRAM的系统上,理论上最大的并发连接数量4000个用户。随着您的客户群的增长,如果希望您的Web应用程序支持更多的用户,那么就必须添加更多的服务器。随之而来的问题就是会增加服务器成本、流量成本和人工成本等成本。除了成本上升外,还有一个潜在的技术问题,即用户可能针对每个请求使用不同的服务器,因此,任何共享资源都必须在所有服务器之间共享。鉴于上述原因,整个Web应用程序架构(包括流量、处理器速度和内存速度)中的瓶颈是:服务器能够处理的并发连接的最大数量。而Node解决这问题的方法是:更改连接到服务器的方式。每个连接发射一个在Node引擎的进程中运行的事件,而不是为每个连接生成一个新的线程(并为其分配一些配套内存)。Node不会使用到锁,不会直接阻塞I/O调用。Node还支持数万个并发连接。我们可以通过下面这两张图深入理解一下PHP和Node.js对处理Http请求时的区别:图1-1PHP的模型图1-2Node.js的模型Node.js原创者是RyanLienhartDahl,后由众多开发者推动其发展,现仍处于活跃的开发状态。Node.js能做的远不止开发一个网站,使用Node.js,可以轻松地开发:具有复杂逻辑的网站;基于社交网络的大规模Web应用;WebSocket服务器;TCP/UDP套接字应用程序;命令行工具;交互式终端程序;带有图形用户界面的本地应用程序;单元测试工具;客户端JavaScript编译器...Node.js作为一个新兴的语言,有很多吸引人的地方:单线程;非阻塞I/O;V8虚拟机;事件驱动单线程的优缺点?Node.js的单线程具有它的优势,但也并非十全十美,在保持单线程模型的同时,它是如何保证非阻塞的呢?高性能:首先,单线程避免了传统PHP那样频繁创建、切换线程的开销,使执行速度更加迅速。第二,资源占用小,如果有对Node.js的web服务器做过压力测试的朋友可能发现,Node.js在大负荷下对内存占用仍然很低,同样的负载PHP因为一个请求一个线程的模型,将会占用大量的物理内存,很可能会导致服务器因物理内存耗尽而频繁交换,失去响应。线程安全:单线程的js还保证了绝对的线程安全,不用担心同一变量同时被多个线程进行读写而造成的程序崩溃。比如我们之前做的web访问统计,因为单线程的绝对线程安全,所以不可能存在同时对count变量进行读写的情况,我们的统计代码就算是成百的并发用户请求都不会出现问题,相较PHP的那种存文件记录访问,就会面临并发同时写文件的问题。线程安全的同时也解放了开发人员,免去了多线程编程中忘记对变量加锁或者解锁造成的悲剧。单线程的异步和非阻塞:Node.js是单线程的,但是它如何做到I/O的异步和非阻塞的呢?其实Node.js在底层访问I/O还是多线程的,有兴趣的朋友可以翻看Node.js的fs模块的源码,里面会用到libuv来处理I/O,所以在我们看来Node.js的代码就是非阻塞和异步形式的。阻塞/非阻塞与异步/同步是两个不同的概念,同步不代表阻塞,但是阻塞肯定就是同步了。举个现实生活中的例子,我去食堂打饭,我选择了A套餐,然后工作人员帮我去配餐,如果我就站在旁边,等待工作人员给我配餐,这种情况就称之为同步;若工作人员帮我配餐的同时,排在我后面的人就开始点餐,这样整个食堂的点餐服务并没有因为我在等待A套餐而停止,这种情况就称之为非阻塞。这个例子就简单说明了同步但非阻塞的情况。再如果我在等待配餐的时候去买饮料,等听到叫号再回去拿套餐,此时我的饮料也已经买好,这样我在等待配餐的同时还执行了买饮料的任务,叫号就等于执行了回调,就是异步非阻塞了。1.3.3MongoDB简介MongoDB是一个基于分布式文件存储的数据库。由\t"/subview/3385614/_blank"C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。他支持的数据结构非常松散,是类似\t"/subview/3385614/_blank"json的\t"/subview/3385614/_blank"bson格式,因此可以存储比较复杂的数据类型。MongoDB最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立\t"/subview/3385614/_blank"索引。MongoDB的主要功能特性有:1、面向集合存储,易存储对象类型的数据;2、模式自由;3、支持动态\t"/subview/3385614/_blank"查询;4、支持完全索引,包含内部对象;5、支持查询;6、支持复制和故障恢复;7、使用高效的二进制数据存储,包括大型对象(如视频等);8、自动处理碎片,以支持云计算层次的扩展性;9、支持\t"/subview/3385614/_blank"RUBY,\t"/subview/3385614/_blank"PYTHON,\t"/subview/3385614/_blank"JAVA,\t"/subview/3385614/_blank"C++,\t"/subview/3385614/_blank"PHP,\t"/subview/3385614/_blank"C#等多种语言;10、文件存储格式为BSON(一种JSON的扩展);11、可通过\t"/subview/3385614/_blank"网络访问。1.3.4Express简介Express是一个简洁而灵活的

node.js

Web应用框架,提供一系列强大特性用以创建各种Web应用。Express是

node.js

已有的特性进行二次抽象,在它之上扩展了Web应用所需的功能。1.3.5ejs模板引擎什么是模板引擎?模板引擎(TemplateEngine)是一个将页面模板和要显示的数据结合起来生成HTML页面的工具。模板引擎就相当于MVC中的视图。模板引擎的功能是将页面模板和要显示的数据结合起来生成HTML页面。它既可以运行在服务器端又可以运行在客户端,大多数时候它都在服务器端直接被解析为HTML,解析完成后再传输给客户端,因此客户端甚至无法判断页面是否是模板引擎生成的。有时候模板引擎也可以运行在客户端,即浏览器中,典型的代表就是XSLT,它以XML为输入,在客户端生成HTML页面。但是由于浏览器兼容性问题,XSLT并不是很流行。目前的主流还是由服务器运行模板引擎。在MVC架构中,模板引擎包含在服务器端。控制器得到用户请求后,从模型获取数据,调用模板引擎。模板引擎以数据和页面模板为输入,生成HTML页面,然后返回给控制器,由控制器交回客户端。什么是ejs?ejs是模板引擎的一种,也是我们这个教程中使用的模板引擎,因为它使用起来十分简单,而且与express集成良好。ejs用来从JSON数据中生成HTML字符串。ejs的优点是将会带给你明确、维护性良好的HTML代码结构。因此,本系统选择使用的模版引擎是ejs。ejs的标签系统非常简单,它只有以下三种标签:<%code%>:JavaScript代码。<%=code%>:显示替换过HTML特殊字符的内容。<%-code%>:显示原始HTML内容。1.3.6MVC设计模式MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。(控制器Controller)——负责转发请求,对请求进行处理。(视图View)——界面设计人员进行图形界面设计。(模型Model)——程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。 图1-3MVC模型图MVC的优点:(1)多个视图能共享一个模型。如今,同一个Web应用程序会提供多种用户界面,例如用户希望既能够通过浏览器来收发电子邮件,还希望通过手机来访问电子邮箱,这就要求Web网站同时能提供Internet界面和WAP界面。在MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性。(2)控制器是自包含(self-contained)指高独立内聚的对象,与模型和视图保持相对独立,所以可以方便的改变应用程序的数据层和业务规则。例如,把数据库从MySQL移植到Oracle,或者把RDBMS数据源改变成LDAP数据源,只需改变模型即可。一旦正确地实现了控制器,不管数据来自数据库还是LDAP服务器,视图都会正确地显示它们。由于MVC模式的三个模块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想能构造良好的少互扰性的构件。(3)控制器提高了应用程序的灵活性和可配置性。控制器可以用来连接不同的模型和视图去完成用户的需求,也可以构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择适当的模型进行处理,然后选择适当的的视图将处理结果显示给用户。MVC的缺点:(1)因为MVC将视图和模型分离了。这就会增加系统的设计结构与其实现方法的复杂性,同时也给系统的调试大大地加大了难度。(2)加大了系统频繁更新的成本。虽然是进行了分层操作,但这并不意味着在更新系统模型的时候能完全忽略视图的性质,当具体的一些接口变化的模型需要频繁更新,而使得在视图的处理上变得繁琐,这导致了视图更新落后于模型的变化,错误情况不能正常地显示。(3)MVC的三层模式会造成系统的构件较多,也就是会增多系统的代码,因此,必须进行有效的代码管理工作。1.4系统运行要求1.4.1硬件要求CPU:速度在500MHz或以上。CPU的处理速度越快,代码跑起来也越流畅。内存:最低配置32MB,建议使用64MB以上内存,如果使用Windows2000或WindowsXP建议使用128MB以上内存。硬盘空间:至少需要200MB以上的硬盘空间。1.4.2软件要求操作系统: Windows8。数据库名称: MongoDB2.6.9。

第2章可行性分析2.1经济可行性开发此社交网站的所需的硬件(计算机其其他)由本人提供。软件环境Node.js开发工具和MongoDB可以从网上下载。本系统的开发、维护由本人负责,因此没有其他方面的支付,开发成本主要是时间成本。系统完成后可作为人们分享文章知识文化等使用。本系统可带来的效益将远远大于本系统的开发成本,所以从经济方面上看,开发此系统是可行的。2.2操作可行性此社交网站具备清新友好的用户界面,操作简单,使用方便、快捷,功能丰富,易于维护。无论用户是网络达人,或者还是一个网络新手,在此网站注册登录后,都可以很快熟悉该网站,并迅速成为分享达人。从用户操作方面看,此系统的开发是可行的。2.3技术可行性2.3.1系统使用的模式本系统采用的模式为B/S模式。B/S模式简介B/S(Browser/Server,浏览器/服务器)模式又称B/S结构。它是随着Internet技术的兴起,对C/S模式应用的扩展。在这种结构下,用户工作界面是通过浏览器来实现的。B/S模式最大的好处是运行维护比较简便,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN,WAN,Internet/Intranet等)访问和操作共同的数据;最大的缺点是对企业外网环境依赖性太强,由于各种原因引起企业外网中断都会造成系统瘫痪。B/S结构利用不断成熟和普及的浏览器技术实现原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。这种结构更成为当今应用软件的首选体系结构,B/S结构以TCP/IP协议为基础的,企业内的WWW服务器可以接受安装有Web浏览程序的Internet终端的访问,作为最终用户,只要通过Web浏览器,各种处理任务都可以调用系统资源来完成,这样大大简化了客户端,减轻了系统维护与升级的成本和工作量,降低了用户的总体拥有成本。2.3.2系统使用的开发语言本系统展现与布局使用了Node.js、HTML5、CSS3、Jquery。HTML5简介HTML即超级文本标记语言,超级文本标记语言是标准通用标记语言下的一个应用,也是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分。网页文件本身是一种文本文件,通过在文本文件中添加标记符,可以告诉浏览器如何显示其中的内容(如:文字如何处理,画面如何安排,图片如何显示等)。浏览器按顺序阅读网页文件,然后根据标记符解释和显示其标记的内容,对书写出错的标记将不指出其错误,且不停止其解释执行过程,编制者只能通过显示效果来分析出错原因和出错部位。但需要注意的是,对于不同的浏览器,对同一标记符可能会有不完全相同的解释,因而可能会有不同的显示效果。HTML5是超文本标记语言(HTML)的第五重大修改,这是一项正在进行中的一个草案,目前还没有正式的标准。HTML5赋予网页更好的意义和结构,支持Html5的浏览器包括Firefox(火狐浏览器),IE9及其更高版本,Chrome(谷歌浏览器),Safari,Opera等;国内的傲游浏览器(Maxthon),以及基于IE或Chromium(Chrome的工程版或称实验版)所推出的360浏览器、搜狗浏览器、QQ浏览器、猎豹浏览器等国产浏览器同样具备支持HTML5的能力。从2012年12月27日至今,进行了多达近百项的修改,包括HTML和XHTML的标签,相关的API、Canvas等,同时HTML5的图像img标签及svg也进行了改进,性能得到进一步提升。由于HTML5语言的特殊性,本系统只在部分功能模块上使用了,HTML5的新特性。CSS3简介CSS即层叠样式表(CascadingStyleSheet)。在网页制作时采用层叠样式表技术,可以有效地对页面的布局、字体、颜色、背景和其它效果实现更加精确的控制。只要对相应的代码做一些简单的修改,就可以改变同一页面的不同部分,或者页数不同的网页的外观和格式。CSS3是CSS技术的升级版本,CSS3语言开发是朝着模块化发展的。以前的规范作为一个模块实在是太庞大而且比较复杂,所以,把它分解为一些小的模块,更多新的模块也被加入进来。这些模块包括:盒子模型、列表模块、超链接方式、语言模块、背景和边框、文字特效、多栏布局等。使用CSS3,可以以很简单的形式创建精美的动画效果。JavaScript简介JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML(标准通用标记语言的子集)网页添加动态功能,比如响应用户的各种操作。它最初由网景公司(Netscape)的BrendanEich设计,是一种动态、弱类型、基于原型的语言,内置支持类。JavaScript是Sun公司(已被oracle收购)的注册商标。Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型(DocumentObjectModel,简称DOM),浏览器对象模型(BrowserObjectModel,简称BOM)。2.3.3系统使用的依赖库为简化JavaScript代码的编写,本系统使用了jQuery框架,框架版本为1.10.2。Web前端CSS框架使用Bootstrap,版本号为2.3.2。jQuery简介jQuery是一个兼容多浏览器的javascript框架,核心理念是writeless,domore(写得更少,做得更多)。它是轻量级的js库,它兼容CSS3,还兼容各种浏览器(IE6.0+,FF1.5+,Safari2.0+,Opera9.0+),jQuery2.0及后续版本将不再支持IE6/7/8浏览器。jQuery使用户能更方便地处理HTML(标准通用标记语言下的一个应用)、events、实现动画效果,并且方便地为网站提供AJAX交互。jQuery能够使用户的html页面保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。如今,jQuery已经成为最流行的javascript框架,在世界前10000个访问最多的网站中,有超过55%在使用jQuery。jQuery是免费、开源的,使用MIT许可协议。jQuery的语法设计可以使开发者更加便捷,例如操作文档对象、选择DOM元素、制作动画效果、事件处理、使用Ajax以及其他功能。除此以外,jQuery提供API让开发者编写插件。其模块化的使用方式使开发者可以很轻松的开发出功能强大的静态或动态网页。Body-parser简介bodyParser用于解析客户端请求的body中的内容,内部使用JSON编码处理,url编码处理以及对于文件的上传处理。Cookie-parser简介cookieParser中间件用于获取web浏览器发送的cookie中的内容,在使用了cookieParser中间件后,代表客户端请求的htto.IncomingMessage对象就具有了一个cookies属性,该属性之为一个对象的数组,其中存放了所有web浏览器发送的cookie,每一个cookie为cookies属性值数组中的一个对象。Morgan简介Morgan中间件用于HTTP的请求记录,在控制台中,显示req请求的信息。如本项目中的请求有:图2-1Serve-favicon简介可缓存的图标中间件,用于设置网页的favicon.ico,它具有以下的优点:用户代理请求的favicon.ico通常是不加区分的,这个中间件可以在中间件记录之前取消向日志的请求;这个中间件将缓存图标而跳过磁盘访问来提高性能;它提供了一个基于图标内容的ETag(ETag是\o"万维网"万维网协议\o"HTTP"HTTP的一部分,是HTTP协议提供的若干机制中的一种\o"Web缓存(页面不存在)"Web缓存验证机制,并且允许客户端进行缓存协商。),而不仅仅是文件系统属性。这个模块将成为最兼容的内容类型(Content-Type)。ejs简介Ejs(EmbeddedJavaScripttemplates)是嵌入式的JavaScript模版,它具有以下的特点:缓存功能,能够缓存已经解析好的html模版;<%code%>用于执行其中javascript代码;<%=code%>会对code进行html转义;<%-code%>将不会进行转义;支持自定义标签,比如'<%'可以用'{{','%>'用'}}'代替;提供一些辅助函数,用于模版中使用

;利用<%-includefilename%>加载其他页面模版。Express-session简介express-session是基于express框专门用于处理session的中间件。session的认证机制离不开cookie,需要同时使用cookieParser中间件。express-session中间件的使用:只需要用expressapp的use方法将session挂载在‘/’路径即可,这样所有的路由都可以访问到session。可以给要挂载的session传递不同的option参数,来控制session的不同特性。session与发送到客户端浏览器的生命周期是一致的。而我们在挂载session的时候,通过option选项的cookie.maxAge成员,我们可以设置session的过期时间,以ms为单位(但是,如果session存储在mongodb中的话,任何低于60s(60000ms)的设置是没有用的)。如果maxAge不设置,默认为null,这样的到期的时间就是浏览器的关闭时间,即每次关闭浏览器的时候,session都会失效。有时候,我们需要session的声明周期要长一点,比如好多网站有个免密码两周内自动登录的功能。基于这个需求,session必须寻找内存之外的存储载体,数据库能提供完美的解决方案。express框架提供了针对mongodb的中间件:connect-mongo,我们只需在挂载session的时候在options中传入mongodb的参数即可,程序运行的时候,expressapp会自动的替我们管理session的存储,更新和删除。当然,由于cookie是由浏览器厂商实现的,cookie不具有跨浏览器的特性,例如,我用firefox浏览器在京东上购物时,勾选了2周内免密码输入,但是当我第一次用IE登陆京东时,同样要重新输入密码。所以,这对服务器的同一个操作,不同的浏览器发起的请求,会产生不同的session-cookie。Multer简介Multer是一个用来处理文件上传的中间件,被用来处理所有multipart/form-data形式的文件,拥有非常全面的接口,首先multer作为一个中间件传入了app.use,当有上传请求到来时,express会拦截此请求并通过multer组件完成上传操作。在multer初始化方法中传入的是配置对象,可以在里面配置自定义的参数,例如“文件大小限制”,“文件数量限制”,“上传注册事件”,“重命名文件名”等等。

第3章需求分析3.1系统功能需求分析需求分析的主要目的是通过详细的需求调研,理清管理流程,并分析其中的问,把握用户的管理需求,设计出应用系统的逻辑模型和功能模型。需求分析是应系统开发过程中最为关键的一个环节,只有准确无误地把握用户需求,开发出的应用系统才能真正为管理人员提供更多的支持。在可行性分析的阶段已论证了开发平台及软件的可行性。而现通过对用户的需要进行调研,进一步明确了系统设计所需实现的功能。系统在功能上应该满足以下需求:用户是使用者和评价者,所以在开发的过程中,我们必须从用户的需求和体验出发,保证系统的功能满足大多数用户的需求,给用户提供足够的交互体验。操作简单、界面友好。布局设计符合大众审美要求,各功能模块显而易见,用户可通过鼠标实现功能模块间的切换。即时可见:对于用户发表的说说、评论、回复、日志、相册、个人资料应该在点击确认时,相关信息立即在其对应的位置显示出来。系统应该快速、稳定、高效、可靠。系统在结构上应该尽可能保持好的扩展性,便于将来升级和维护。3.2系统功能模块数据流图3.2.1注册、登录模块使用本系统无须强制注册为会员,并无须登录就能进入系统,但部分功能不可用。图3-1注册、登录模块数据流图

第4章总体设计4.1总体设计的任务总体设计是在系统分析的基础上由抽象到具体的过程。根据用户需求分析阶段得到的目标系统的逻辑模型确定一个合理的软件系统的体系结构。包括划分组成系统的模块,模块间的调用关系及模块间的接口关系,软件系统所用的数据结构或者数据库结构。4.2系统HIPO图图4-1系统HIPO图4.3数据库设计概述1.数据库选择MongoDB是一个介于\t"/subview/3385614/_blank"关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似\t"/subview/3385614/_blank"json的\t"/subview/3385614/_blank"bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立\t"/subview/3385614/_blank"索引。2.数据库编码为避免显示中文时显示乱码,数据库采用UTF-8编码格式,UTF-8是UNICODE的一种变长字符编码又称万国码,现在已经标准化为RFC3629。4.5数据库详细设计1数据表的设计表4-1添加用户表(users)中文字段名称英文字段名称类型是否索引备注用户IDidObjectID是NOTNULL用户名NameString否密码PasswordString否邮箱EmailString否表4-2添加文章表(posts)中文字段名称英文字段名称类型是否索引备注用户ididObjectID是NOTNULL用户名NameString否时间TimeDate否标题titleString否标签tagsArray否正文PostString否评论CommentsObject否转载量Reprint_infoInt否阅读量pvInt否

第5章详细设计5.1注册模块设计5.1.1模块及流程简述注册模块让用户注册为本系统会员。用户进入系统前必须要进行注册,用户在注册窗口输入个人信息,需提交的信息有:注册邮箱、用户名、密码,点击确认后,系统会核对用户提交的信息会不会与数据库的资料冲突,核对无误后,便将数据传入数据库并自动跳转至首页。如果与数据库的资料冲突,则提醒用户修改资料。如数据库中已有此用户名则提示“用户已存在!”,如重复密码与设置密码不一致时则提示“两次输入的密码不一致!”。5.1.2模块主要代码文件会员注册:index.ejs验证、核对信息并提供反馈:index.js5.1.3模块界面设计图5-15.2登录模块设计5.2.1模块及流程简述用户在成功注册为本系统会员后,经登录进入系统。用户在登录时需输入用户名、密码。点击提交按钮系统会核对用户的登录信息,核对无误后方可进入系统。如果用户密码填写错误,会提示“密码错误!”。如果数据库中无此用户名,则提示“用户不存在!”5.2.2模块主要代码文件会员登录:login.ejs验证、核对信息并提供反馈:index.js5.2.3模块界面设计图5-25.3首页模块设计5.3.1模块简述用户可在此页面查看按距离时间最近开始显示的文章预览,包括文章的标题、发表时间、作者、标签、全部或部分正文以及相关的阅读量、评论量和转载量。一页默认显示10篇文章,当大于10篇时,底部可上下页面跳转。5.3.2模块主要代码文件首页主代码:index.ejs引入代码:paging.ejs5.3.3模块界面设计图5-35.4发表文章模块设计5.4.1模块简述考虑到用户可能会在博文里插入图片及其他,因此文章编辑应该要有一个支持富文本的功能,本系统采用了kindEditor4.1.10。用户可在此模块进行文章的相关信息添加:标题、标签、正文。其中正文编辑的功能包括字体选择、撤销还原、字体颜色、文字背景色、加粗、斜体、下划线、删除格式、左右对齐、居中、编号、项目符合、表情、添加网络图片、超链接。5.4.2模块主要代码文件界面:post.ejs功能:post.js、index.js引入kindEditor5.4.3引用kindEdith核心代码vareditor1;KindEditor.ready(function(K){editor1=K.create('#editor_id',{allowImageUpload:false,resizeType:0,items:['fontname','|','undo','redo','|','forecolor','hilitecolor','bold','italic','underline','removeformat','|','justifyleft','justifycenter','justifyright','insertorderedlist','insertunorderedlist','|','emoticons','image','link']});});5.4.4模块界面设计图5-45.5文章正文模块设计5.5.1模块简述该页显示文章全文及文章的相关信息、功能及评论模块。相关信息包括文章的发表时间、作者、阅读量、评论量、转载量及标签,其中作者可链接到该作者的所有文章列表页,标签可链接到含有该标签的所有文章列表页。功能键则会判断是否为文章作者来选择显示“编辑或删除”或“转载”。评论模块暂只支持文字评论,评论后显示用户名及评论时间和评论内容,支持未登陆用户评论。5.5.2模块主要代码文件界面:article.ejs、comment.ejs功能:post.js、comment.js、user.js5.5.3模块界面设计图5-55.6图片上传模块设计5.6.1模块简述此页面可上传用户本地图片,登录后可见。5.6.2模块功能主要代码界面:upload.ejs功能:index.js5.6.3模块核心代码app.use(multer({dest:'./public/images/head',rename:function(fieldname,filename){returnfilename.replace(/\W+/g,'-').toLowerCase()+Date.now();},limits:{fileSize:1048576}}));5.6.4模块界面设计图5-65.7标签文章列表模块设计5.7.1模块简述此模块会将所以与此标签关联的文章以列表的形式输出标题及发表时间,点击标题可查看文章。5.7.2模块主要代码文件界面:tags.ejs功能:index.js、post.js5.7.3模块界面设计图5-75.8搜索模块设计5.8.1模块简述此模块根据关键字模糊查询文章标题,且字母不区分大小写。结果以列表形式显示,界面与标签文章列表页相同。5.8.2模块主要代码文件界面:search.ejs功能:index.js、post.js

第6章系统测试6.1测试方法本系统主要使用单元测试、黑盒测试和白盒测试。6.1.1单元测试方法简述在编写源程序阶段就使用此方法对系统进行测试。在源程序无语法错误后,通过运行程序,对局部数据结构进行测试,以发现局部数据说明、初始化、默认值等方面的错误。对源程序中存在多维数组时,进行边界条件测试。6.1.2白盒测试方法简述1.条件覆盖使用逻辑覆盖中的条件覆盖。使用条件覆盖,不仅可以使每个语句执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。6.1.3黑盒测试方法简述1.等价划分首先划分输入数据的等价类,分析程序的功能说明,从而确定输入数据的有效等价类和无效等价类。通过等价类的划分,可以将程序的输入域划分为若干个数据类,以此来推导出测试用例。6.2测试用例6.2.1注册登录模块表6-1注册登录模块测试用例用例描述预期结果实际结果1注册页面,注册邮箱为:@提示用户邮箱格式不正确提示用户邮箱格式不正确2注册页面,注册邮箱为:a@.com提示用户邮箱格式不正确提示用户邮箱格式不正确3注册页面,注册邮箱为:a@dfdf提示用户邮箱格式不正确提示用户邮箱格式不正确4注册页面,注册邮箱为:a@提示用户邮箱格式正确用户邮箱格式正确5注册页面,未填写邮箱,点击注册按钮可注册可注册6注册页面,未填写用户名,点击注册按钮注册按钮不可用,提示请填写此字段注册按钮不可用,提示请填写此字段7注册页面,未填写密码,点击注册按钮注册按钮不可用,提示请填写此字段注册按钮不可用,提示请填写此字段8注册页面,未填写任资料,点击注册按钮注册按钮不可用注册按钮不可用9注册页面,填写一个未被注册的正确邮箱可注册可注册10注册页面,两次密码不一致提示用户两次输入的密码不一致提示用户两次输入的密码不一致11登录页面,填写一个未被注册的正确邮箱可注册可注册12登录页面,填写错误密码提示用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论