大学生服务器放宿舍(大学生服务器哪个平台好)

本项目涉及的内容过多,将分为三篇文章进行展示,第一篇文章整体介绍这个项目的情况,包括项目事项的功能和相关技术;第二篇文章重点介绍学生路由信息的相关内容;第三篇则重点介绍成绩路由相关内容。

获取所有学生的成绩信息功能(/students/scores)

获取所有学生的成绩信息列表路由采用了student路由器的一个子路由,它与students路由相同,都是定义在students.js文件中,但是在客户端访问Web API时指定路径为/students/scores,路由中既包含学生信息又包含成绩信息,代码实现如图1所示

大学生服务器放宿舍(大学生服务器哪个平台好)

图1

图1第40行代码中,通过路由器的get方法指定路径和对应的处理器,可以看出子路由与普通的路由使用方法相同,所不同的是它的第一个参数由之前的路径/变为了/scores,再结合student路由器的挂载点/students,最终获取成绩的路径就变为了/students/scores,因此在访问学生成绩信息的时候,对应的路径就变为了/students/scores。对于Web API服务器来说,访问学生信息的路由为/student,虽然这两个请求使用的方法都是get,但服务器只需要根据第一个参数就可以区分出哪一个请求是获取学生信息,哪一个请求又是获取成绩信息,故获取成绩信息的请求不再需要其它参数就可以了。

Web API服务器在确定了待访问的数据类型之后,继而执行对应的业务逻辑代码,如图1第41-44行所示,它使用了一个getScores函数来计算所有的成绩信息,getScores函数的实现代码如下图2所示。

大学生服务器放宿舍(大学生服务器哪个平台好)

图2

在图2代码中,第203-217行为构建学生成绩的业务逻辑代码。由于学生成绩的信息展现数据与服务器端内存(数据库)中存储的数据不完全相同,因此,我们需要对原始的数据进行转换,以便于客户端进行展示(当然有的方案是将这些逻辑交给客户端处理,以减少对服务器计算资源的占用),图2代码使用了数组的map方法,对store.scores中的每一项数据都进行转换处理,其目的就是将成绩对象中的学生编号Id替换为对应的学生姓名,但是姓名信息并没有直接存储在成绩对象中,而是位于学生对象中的firstName和lastName字段。图2第205行代码依据成绩对象中的studentId字段在学生数组students中查找对应的学生信息,找到对应的数据后会通过第210行代码使用firstName和lastName字段计算出新的studentName姓名字段值。

最终实现的效果是将整个成绩数组作为获取学生成绩响应的payload值返回给客户端,图1中第43行代码指定了payload对应的数据值。

创建一个学生成绩信息的功能(/students/scores)

创建一个学生信息时,我们通过使用路由器的post方法,并将学生信息作为消息体传递给Web API服务器,此方法同样适用于创建学生的成绩信息,只不过在创建学生信息时需要额外的数据校验逻辑,我们首先看一下如何处理学生成绩信息请求,如下图3所示

大学生服务器放宿舍(大学生服务器哪个平台好)

图3

图3第47行代码,调用路由器的post方法,同样使用了子路由/scores,使得Web API客户端可以通过路径/students/scores访问此API,学生成绩的信息是通过消息体传输给服务器,因此,Web服务器框架使用解析器,将解析后的对象存放于req的body字段中,代码第48行使用req.body在服务端创建成绩信息。createScore函数含有一个参数,即学生成绩对象,如下图4所示。

大学生服务器放宿舍(大学生服务器哪个平台好)

图4

在图4第251行代码,首先通过函数validateScore方法检验解析后的成绩对象各个字段的信息是否合法,目前,只有当score字段中studentId、math、physics和chemistry全部存在的时候才视为合法的成绩对象,否则视为非法数据,返回值为false,通过图4中第252行代码给出错误信息。

大学生服务器放宿舍(大学生服务器哪个平台好)

图5

完成成绩对象是否合法检查之后,还需要检查另外一项内容,判断成绩信息所携带的studentId值是否在当前的服务器端存在,如果没有对应的学生信息,同样,这条成绩信息也是一个非法的数据,一样给出错误提示,如图4第257行所示。

这两项检查都成功之后,便会对成绩对象进行Id字段赋值,之后将这个新生成的成绩信息加入到服务器端的成绩数组中,这样就完成了一条学生成绩信息的创建功能。

获取一个学生成绩信息的功能(/students/scores/:studentId)

获取学生成绩的信息时,我们需要指定这个学生的编号Id值,第一篇文中我们介绍过,学生信息和成绩信息为1:1关系,一个学生只允许对应一条成绩信息,因此,我们在获取成绩信息的时候就可以通过指定学生的编号Id来唯一的确定对应的成绩信息了。对于获取信息,按照前文中使用方式,我们还是采用路由器的get方法,将学生的编号Id作为路径参数传递给get方法,代码如下图6所示

大学生服务器放宿舍(大学生服务器哪个平台好)

图6

在图6第6行代码,指定路径参数:studentId作为学生编号Id,客户端请求此接口时,Web 服务器进行路径解析后,会将对应的学生编号Id存放在req.params.studentId中,如图6中第7行代码所示,之后便可以通过调用函数getScore取得对应的成绩信息,如下图7所示。

大学生服务器放宿舍(大学生服务器哪个平台好)

图7

在图7中,通过store.scores数组的过滤方法获取所有Id与studnentId相同的成绩信息列表,本例中如果含有数据,我们只返回第一个元素,否则,返回一个undefined值。

删除一个学生成绩信息的功能(/students/score/:studentId)

删除学生成绩信息与上一个获取学生信息所指定的路径及其所需要的参数都相同,但使用了路由器的delete方法, 如下图8所示

大学生服务器放宿舍(大学生服务器哪个平台好)

图8

在图8第16行代码,指定了路径参数studentId和所使用的路由器方法delete,之后在处理器方法中使用req.params.studentId作为删除成绩函数deleteScore的参数。函数deleteScore定义如下图9所示。

大学生服务器放宿舍(大学生服务器哪个平台好)

图9

图9代码,通过调用数组store.scores的filter方法,过滤掉studentId对应的成绩信息,我们在代码中使用了一个局部变量scores表示过滤后的数据,之后通过第155行代码得到过滤前后成绩信息个数的变化值,整个删除操作的响应payload字段使用这个数值表示删除成绩的个数。

更新学生成绩信息的功能(/students/scores/:studentId)

与更新学生信息的功能类似,更新一个学生成绩信息的操作最为繁琐。更新学生成绩信息时,我们需要提供这个学生的编号Id值以及新的成绩值。学生编号Id值使用路径变量studentId进行传递,成绩值则存放于消息体中,其获取路径的方法与获取一个学生成绩的路径方法相同,但是使用了路由器的put方法,它通常用以表示更新操作,下图10为对应代码。

大学生服务器放宿舍(大学生服务器哪个平台好)

图10

图10代码中,客户端请求更新时的路径应该为/students/scores/:studentId,服务器端对客户端的请求进行路径解析和消息体解析完成后,我们可以在请求处理器中分别使用req.params.studentId和req.body获取到对应的学生编号Id和新的成绩信息值,之后便交由updateScore函数进行服务器端数据更新,如下图11所示。

大学生服务器放宿舍(大学生服务器哪个平台好)

图11

图11第130行代码通过store.scores数组的find方法查找对应的成绩对象,如果找到这个成绩对象,则会在第134-136行将新的成绩值字段一一赋值到原有对象的对应字段中,最后返回这个新的成绩对象。但是如果没有找到对应的待更新成绩对象时,返回值为一个undefined值。

至此,我们就完成了学生信息和学生成绩信息管理的所有操作,整个项目中,涉及到两类的数据:一类是学生信息,另一类是学生的成绩信息。由于成绩信息依赖于学生信息,因此在对成绩信息进行操作时,也应该考虑到对应的学生信息是否受影响,其逻辑相对于学生信息操作来说相对复杂。如果使用更多类型的数据,那么其逻辑也会变得更加复杂。

本文为Web API服务端开发最后一篇文章,此项目一共分为三篇进行介绍,第三篇重点介绍学生成绩路由处理逻辑。

    

使用无须实名的阿里云国际版,添加 微信:ksuyun  备注:快速云

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 cloud@ksuyun.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.hanjifoods.com/5735.html