本项目涉及的内容过多,将分为三篇文章进行展示,第一篇文章整体介绍这个项目的情况,包括项目的功能和相关技术,还提供了项目中使用到的数据类型和路由信息等;第二篇文章重点介绍学生路由信息相关内容;第三篇则重点介绍成绩路由相关内容。
每一个人在学习计算机编程的过程中,基本上都曾经开发过一个《XX管理系统》的软件。比如刚刚学习完C语言编程,通常会编写一个基于文件的学生成绩管理系统;学习了网络TCP/IC相关技术,会创建一个客户端和一个服务器程序,同样可以实现一个网络版的学生成绩管理系统。本项目也无法跳出软件管理系统的范畴,它实现一个Web版本的学生成绩管理系统,这是一个WebAPI服务器项目,接收来自客户端提供的学生成绩信息,客户端的消息请求数据都是JSON格式的,Web服务器同样将消息以JSON格式进行编码,之后发送给客户端程序。服务器端实现对外部提供管理学生及其成绩的数据WebAPI接口。
提供一个基于WebAPI的网络服务器,使用HTTP(S)协议进行访问。项目设计了两种类型的数据:一种是用以表示学生信息的数据,另一种是表示学生的各个学科考试成绩的数据。学生的属性信息在下表1中进行了详细说明。
表1
成绩信息表记录了每一个学生的每一学科考试成绩值,为了简化起见,我们将学生与成绩之间的关系限制为1:1关系,即一条学生信息对应一条成绩信息,本项目不涉及多次考试和多学期考试等信息,成绩信息表记录的内容如表2所示:
表2
在表2中,第2行表示每一个成绩值所对应的一个学生编号值,即通过这个学生编号,我们就可以在学生表中查找到对应的学生信息,使用这两个表的信息可以构建出整个表示学生考试成绩的情况。
整个服务端应用提供的WebAPI的功能也分为两大类:一类API用以处理学生的信息,另一类API用以处理考试成绩数值的信息。
本项目应用运行在Node平台上,使用ExpressWeb框架进行开发这个应用程序。Node作为一种使用Javascript编程语言运行的后端技术,极大地方便了Javascript开发者向后端技术转移,整个Javascript的生态也极其完善。Express作为Node平台上的一个开发框架,它的用法简单,对于客户端响应快速,整个应用也足够强健,深受开发者的喜爱,而且基于这个框架还衍生出好多其它框架,因此熟悉了Express框架之后对于后续学习NodeWeb开发技术是很有帮助的。
本项目使用express生成器构建整个应用的框架,开发过程中使用了Express的路由技术、方法处理器、路径参数、消息体解析等。这些内容在Web应用开发中经常会用到,下文中会进行重点介绍。
项目的目录结构保持express生成器构建的层次结构,为了将数据存储起来,添加了一个新的目录store用以存放数据,这个目录中目前只包含一个文件store.js,如图1所示。文件store.js中创建一个内存数据库(实际上只是一个含有两个属性的对象),每一个Web的请求交互都会使用这个文件中的数据,或是保存或是读取数据。
图1在routes目录下增加了一个新的路由文件students.js,大部分代码位于这个文件中,它定义了学生信息和得分信息的路由及其处理器,定义的路由信息见表3
表3
表3只给出了对应的路由信息及其对应的含义,但并没有描述请求时所需要的其它参数,比如创建学生信息时,这些信息都是存在于在消息体中,因此,在处理相关操作时还需要读取消息体的内容。接下来的文章将按照上表3中列出的路由逐一进行介绍。
学生信息和成绩信息的路由都是在students.js文件中定义的,通过使用require语句将students路由引入至app.js文件中,如下图2所示
图2之后就可以通过studentsRouter变量访问此路由器了,这个路由器是一个Express.js的标准中间件,我们通过.use方法来使用它,如下图3代码所示:
图3第22行代码表示在路径/students上挂在了对应的路由器中间件,在此路由器中定义的路由一次为挂载点进行路径构建。
在进行详细介绍之前,首先展示下这些信息在服务器端是如何存储的。我们使用了store.js进行构建一个内存数据库,实际上它就是一个对象,存放着两个属性值:一个名称为students数组,存放所有的学生信息数据;另一个名称为scores数组,存放着所有的成绩信息数据,依据客户端发送的请求类型对这两个数据进行相对应的增删改查和运算操作。
本文为WebAPI服务端开发第一篇文章,此项目一共分为三篇进行介绍,第二篇重点介绍学生信息路由处理逻辑。