在现代的web应用中,许多的业务逻辑是使用JavaScript实现的。前端框架如React和Vue,已成为开发人员的首选,而Node.js已经成为许多后端应用程序的首选,尤其是在开发大型系统时。Sequelize是Node.js的一种ORM,提供了一种方便的方式来创建,读取,更新和删除SQL数据库中的记录。sequelize-external-fields是一个Sequelize插件,提供了一个简便的API来在外部加入字段。
安装
在你的项目文件下进行npm install sequelize-external-fields --save
,即可安装sequelize-external-fields。
sequelize-external-fields的简介
当你需要在查询中加入额外的字段时,sequelize-external-fields便显得非常有用。在Sequelize中,指定Model属性来筛选查询结果非常容易,如下所示:
Model.findAll({ where: { attribute1: value1, attribute2: value2 } })
这个方法直接查找具有attribute1=value1和attribute2=value2的所有记录。现在,假设你想查询记录中某一个计算字段的值。 在ORM中,你只需创建一个虚拟字段,将其添加到模型中,同样设置查询的属性,即可完成此查询功能。但是,sequelize-external-fields的功能明显更加方便。
sequelize-external-fields的使用
假设现在我们有一个 “order” 表,在查询订单记录时想额外返回一个计算字段 “orderTotal”。我们可以通过下面这样的方式来实现:
正常的sequelize查询
-- -------------------- ---- ------- ----- --------- - --------------------- ----- --------- - --- ------------------------- ----------- ----------- - ----- ------------ -------- -------- --- ----- ----- - ------------------------- - -------- - ----- ------------------ ----------- ----- -------------- ---- -- ------------ - ----- ------------------ ---------- ----- -- ------------ - ----- ------------------ ---------- ----- -- ---------- - ----- --------------- ------------- ------------- - --- --------------- ------ - ------------ - - ---------------- -- - ----------------- --------------------- -- - ----------------- -------- -------- ------ ---
加入sequelize-external-fields的sequelize查询
-- -------------------- ---- ------- ----- --------- - --------------------- ----- --------- - --- ------------------------- ----------- ----------- - ----- ------------ -------- -------- --- -------------------------------------------------- --------------------------- ----- ----- - ------------------------- - -------- - ----- ------------------ ----------- ----- -------------- ---- -- ------------ - ----- ------------------ ---------- ----- -- ------------ - ----- ------------------ ---------- ----- -- ---------- - ----- --------------- ------------- ------------- - -- - --------------- -------------- -- ----------------- --- -- -------------------- --------------- ------ - ------------ - -- --------------- - ------------------------------------------------ -- -------------- - ---------------- -- - ----------------- --------------------- -- - ----------------- -------- -------- ------ ---
在上面的代码中,我们使用了sequelize-external-fields提供的externalFields属性。这个属性告诉Sequelize我们要加入一个新的计算字段 “orderTotal”。我们还在模型内定义了虚拟的属性,这样就可以“告诉”Sequelize查询我们计算的字段值的位置。
接下来,我们使用externalFields属性来指定我们想要查询的额外字段,使用 .literal 方法来指定应该如何计算这个额外字段的值。这里别忘了用单引号把计算字段的名字括起来。
最后,使用正常的Sequelize的API进行查询并返回结果即可。
总结
Sequelize-external-fields插件为Sequelize增加了灵活性,它使得添加计算字段非常容易。虽然Sequelize本身已经用“虚拟属性”(virtual attributes)完成了一部分原本计算处理的工作,但它对不同的查询方式的灵活性仍然不足。使用sequelize-external-fields,ORM创建者可以方便地向查询结果添加任何想要的计算字段,并提供更多灵活性。
在开发实践中,使用sequelize-external-fields可以更好地维护SQL查询的可读性和可维护性,并让开发人员在性能和代码简洁性之间取得适当的平衡。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055cd881e8991b448da770