预备党员无记名投票表格模板(支部选举投票表格模板)

「fastify项目实战」投票Web应用之五
「fastify项目实战」投票Web应用之四
「fastify项目实战」投票Web应用之三
「fastify项目实战」投票Web应用之二
「fastify项目实战」投票Web应用之一

我们完成了用户模型和用户路由的插件化工作之后,接下来是对投票功能的插件化。每一个插件的创建、注册和使用步骤都是相同的,本文中我们将不再详细介绍投票模型插件化的详细操作步骤,只描述其中完成插件化后的功能,之后我们再增强了投票应用的功能,使其能够依据投票信息获取对应的用户信息,也可以使用用户信息获取对应的投票信息,即在投票条目和用户之间建立多对多的关系。

投票模型

投票模型插件位于models目录下,名称为votes.mjs,通过装饰方法decorate向fastify实例中注册了一个对象,名称为voteModel,这样就可以在其它的插件中使用此投票模型了,voteModel模型提供的全部方法如下表所示。

预备党员无记名投票表格模板(支部选举投票表格模板)

表1

在投票路由代码中,将所有与投票模型相关的代码都可以去掉了,直接交给投票模型来处理就可以了,下面提供了获取一个投票条目的投票路由实现代码,如图1所示

预备党员无记名投票表格模板(支部选举投票表格模板)

图1

图1中第58行代码使用了投票模型插件中注册的voteModel对象,使用这个对象的findOne方法查找当前投票模型中是否含有一个Id与voteId相同的投票条目,如果不存在这样的数据,则服务器抛出一个异常,反之,则将对应的投票条目返回给用户。

投票用户模型

在投票模型中,我们定义的投票条目如下图2所示,图中第5行使用了一个名称为count的属性,它表示当前这个投票条目所获得的票数是多少。现在客户需要更多的投票信息,思考下面的两个问题:

  1. 如何知道都是哪些用户对特定条目进行了投票?
  2. 如何知道一个用户都对哪些条目进行了投票?
预备党员无记名投票表格模板(支部选举投票表格模板)

图2

以上的两个问题既不是单独的投票条目问题,也不是单独的用户信息问题,而是投票条目与用户之间的关系问题。如果需要解决上述提出的两个问题,图2中的投票数目count属性就无法满足客户的需求了,现在,我们需要提供一种用户和投票条目联系的数据模型,我们称之为投票用户模型,这个模型中记录了用户投票时的用户Id和对应的投票条目Id。

构建投票用户模型插件

在models目录下创建一个新的文件,名称为vote-users.mjs,在这个文件中定义一个voteUserModel对象,这个对象中含有一个data属性,它是一个数组类型的属性,存储着所有的投票用户模型数据。

预备党员无记名投票表格模板(支部选举投票表格模板)

图3

图3中第5行代码定义为投票条目的Id值,第6行代码定义为用户的Id值。这两个Id构成了投票用户模型,data属性就表示投票用户模型数组。

支持的操作

元素是否存在

它表示提供一个含有投票Id和用户Id的对象,在成员data数组中查找是否含有与这个对象中信息一致的元素。如下图4所示,其方法名称为has,只使用了一个参数vu。第40-42行代码使用了数组find方法,查找voteId和userId都相同的元素。

预备党员无记名投票表格模板(支部选举投票表格模板)

图4

添加数据

成员属性data为一个数组类型,在向其进行添加元素时,首先需要检查这个元素是否已经存在于data数组中,可以调用上述的has方法,如果has方法的返回值为真值,那么表明同样的元素已经存在,无需执行添加操作;反之,则这样的元素不存在于data数组中,通过第37行代码将它添加到数组中,如下图5所示。

预备党员无记名投票表格模板(支部选举投票表格模板)

图5

删除数据

删除数据时首先是检查这个元素是否存在于数组中,如下图6中,第45-47行代码所示,如果这个元素不存在,即findIndex方法的返回值为-1,那么,就无需执行任何操作;反之,则需要调用data数组的splice方法,使用查询到的索引值index作为参数,删除这一个元素。

预备党员无记名投票表格模板(支部选举投票表格模板)

图6

使用投票条目Id获取所有用户Id

图3中数组data所存储的每一个元素都含有投票条目Id和用户Id值,通过查询数据中的每一个元素的投票Id值,如果元素的voteId值与参数voteId值相同,那么此元素中的用户Id值就是我们所想要的结果,如图7所示,通过第55行代码过滤出元素的voteId与参数voteId相同的元素,之后再执行第56行的map操作,将这个元素转换为一个用户Id。

预备党员无记名投票表格模板(支部选举投票表格模板)

图7

使用用户Id获取对应的投票条目id

与上一节通过投票Id获取用户Id相类似,这个功能是提供一个用户的Id值,通过查询成员data数组中的用户Id值,得到所有满足条件的投票条目Id值。图8中第60行代码使用userId参数进行过滤data数组中的元素,第61行代码使用map方法将元素转换为投票条目Id。

预备党员无记名投票表格模板(支部选举投票表格模板)

图8

插件化

完成上述的投票用户模型后,创建一个标准的fastify插件,按照fastify插件的定义标准,创建如下图9所示的代码。

预备党员无记名投票表格模板(支部选举投票表格模板)

图9

图9中第66行代码使用了装饰方法decorate将voteUserModel对象注入到当前fastify实例中,之后在需要使用这个模型的时候就可以通过注册此插件的方式来访问投票用户模型对象了。

投票路由插件

投票用户模型插件完成之后,我们就可以调整投票路由插件的功能了,首先需要将这个插件引入到当前的路由插件中,使用如下图10的代码。图中第3行代码引入了插件文件vote-users.mjs,之后在第7行代码进行了注册,我们同样使用了fastify-plugin方法,使voteUserModel在整个实例中可用。

预备党员无记名投票表格模板(支部选举投票表格模板)

图10

获取投票结果

因为投票条目对象的属性count值不能准确地表示投票条目和用户的关系,我们现在通过计算voteUserModel中的数据计算出投票总数。采用如下的计算方法:通过投票条目的Id值调用voteUserModel的方法getUsers获取到所有投票的用户Id数组,之后,再获取到这个数组中元素的个数。

预备党员无记名投票表格模板(支部选举投票表格模板)

图11

图11中第34行代码获取到所有的投票条目信息,但是,这些投票条目信息中的count属性已经不是真实的投票数目,而是通过第36行代码调用voteUserModel对象中的getUsers方法得到相关的用户Id数组,之后访问这个数组的length属性,这个属性值就是当前投票条目对应的投票数目,我们将投票条目的count属性设置为length。

获取投票条目的用户信息

将获取投票条目的用户信息的路由定义在投票路由文件vote.mjs中,新增一个路由“/votes/:voteId/users”表示获取投票条目的用户信息,它表示获取所有对Id值为voteId的投票条目执行过投票的用户信息。如图12所示。

预备党员无记名投票表格模板(支部选举投票表格模板)

图12

图12中第41行代码定义了这个功能的路由,使用的方法为GET。第42行代码从路由中获取投票条目的voteId值,之后调用voteUserModel的getUsers方法获取到所有对应的用户Id值,执行到这一步,我们所获取到的信息仅仅是用户的Id值,在这里我们还需要另外一个用户模型,通过用户模型的findWithIds方法得到完整的用户信息,如图12中第44行代码所示。

获取用户的投票条目信息

将用户的投票条目信息的路由放置在用户路由user.mjs文件中,同样新增一个路由“/users/:userId/votes”表示获取用户的投票条目信息。它表示Id为userId的用户都对哪些投票条目进行了投票,如下图13所示。

预备党员无记名投票表格模板(支部选举投票表格模板)

图13

图13中第20行代码定义了这个对应的路径,同样采用的是GET方法,第21行代码在request对象params属性中获取userId的值,第22行代码使用userId值作为投票用户模型方法getVotes的参数,调用完成之后便获取到所有的投票条目Id值,如果想要获取所有的投票信息,那么同样需要再调用投票模型中的findWithIds方法将Id值转换为对应的投票条目对象。

至此,我们的投票应用功能上基本已经完成了,我们使用了2个路由插件、3个数据模型插件。对于fastify插件的介绍我们就暂时告一段落,接下来的文章将继续介绍fastify的另一个特性-钩子机制。谢谢阅读,我们下一篇文章见。

「fastify项目实战」投票Web应用之五
「fastify项目实战」投票Web应用之四
「fastify项目实战」投票Web应用之三
「fastify项目实战」投票Web应用之二
「fastify项目实战」投票Web应用之一

............试读结束............

查阅全文加微信3231169

如来写作网gw.rulaixiezuo.com(可搜索其他更多资料)

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 3231169@qq.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.rulaiwenku.com/165968.html
(0)
上一篇 2022年7月16日 下午4:45
下一篇 2022年7月16日

相关推荐

  • 小学生征文(小学生征文怎么写)

    小学生征文是一项富有教育意义的活动,它不仅能够锻炼孩子们的思维、表达和写作能力,还能够让他们通过文字记录自己的成长与未来的梦想。本文将以小学生征文为主题,探讨如何写好一篇小学生征文…

    2023年8月8日
    17
  • 结题报告ppt模板(结题报告怎么写)

    课题研究十分不容易,好不容易走到课题结题的步骤,我们更是要注意各方面的要求和规范,提供齐全合理的佐证材料,以免在结题中出现问题,影响到结题结果或时间。关于课题结题的佐证,具体介绍如…

    2022年4月25日
    44
  • 如来写作网客服微信:3231169,获取1000G公文写作资料库
  • 国家发展,国家现代化发展?

    中国正在朝着高质量发展的方向迈进,这并非毫无根据的想法,而是基于人类文明发展史的研究和总结。历史告诉我们,发展动力的衰竭会导致各种问题的出现。因此,中国已经开始积极应对这一挑战,以…

    2023年10月1日
    12
  • 恶梦醒来的好句子,早上说了噩梦怎么办

    年年岁岁花相似,岁岁年年景不同。今年公司初六开业聚餐,员工初七打卡上班开始工作。早晨,坐到办公桌前,头脑一凛:春节已过,新年开始,要开始挣钱了。 离开麻将桌回到办公室,掐着手指头算…

    2023年2月20日
    24
  • 保健品市场(保健品市场调查与分析)

    随着人们健康意识的不断提高,保健品市场正逐渐成为一个热门的行业。人们越来越重视保持健康的方式,并愿意为此花费一些费用。在这篇文章中,我们将对保健品市场进行调查与分析,以了解这个行业…

    2023年7月17日
    27
  • 读书报告格式模板(读书报告格式模板 大学生)

    一份完整的大学生读书报告格式模板 作为大学生,读书报告是我们常常要写的一项任务。不仅能够提高我们的阅读能力,深化对书中知识的理解,还可以培养我们的思维能力和表达能力。然而,对于许多…

    2023年9月11日
    20
  • 新闻评析如何写,新闻评议稿

    1. 时代变迁——新闻记忆 作为一位在政府机关工作十年以上的公务员,我常常回忆起以前撰写的各种材料。这些材料记录了时代的变迁和政府的发展,也见证了我个人从一个年轻的“小娃娃”成长为…

    2024年1月3日
    8
  • 打屁股作文上学期考试没考好3000字,打屁股作文上学期考试没考好3000字家规!

    2020年8月26日, 家住湖南省常德市鼎城区许家橋回族维吾尔族乡兴旺村的何润琪,小心翼翼地打开清华大学寄来的快递。看到清华大学录取通知书,一旁的父亲何则明激动得泪雨滂沱…… 20…

    2022年12月17日
    311
  • 学党史听党话做新时代好少年观后感(新时代好少年观后感50字左右)

    争做新时代好少年 梁启超先生曾说:“少年智,则国智。少年富,则国富。少年强,则国强。”中国社会主义进入了新时代,机遇与挑战并存,在此时机,每位中华儿女都应该鼓足干劲、砥砺前行。作为…

    2022年4月27日
    27
  • 会计实习主要内容(会计实训内容)

    会计实习主要内容(会计实训内容) 会计实习是会计专业学生在校期间进行的一项重要实践环节,旨在让学生将所学理论知识运用到实际工作中,提升他们的实际操作能力和实际问题解决能力。会计实习…

    2023年9月12日
    23
搜索资料 全部分类 搜索教程
扫码关注

客服代找资料
加客服微信:3231169
私发想要资料的标题/关键词
快速代查找相关所有资料

如来写作网客服微信3231169

立即扫码添加我吧

微信咨询

客服代找资料
加客服微信:3231169
私发想要资料的标题/关键词
快速代查找相关所有资料

如来写作网客服微信3231169

立即扫码添加我吧

返回顶部