2020年排名前11位的Node.js ORM、SQL生成器

10,928 阅读19分钟

翻译自www.prisma.io/dataguide/d…

数据库工具

2020年排名前11位的Node.js ORM、SQL生成器

内容

介绍

为Node.js应用选择ORM或查询生成器可能很艰巨。有许多不同的库可让您从JavaScript应用程序中查询和操作数据,并且每种库的设计和抽象级别各不相同。

本文旨在作为选择一个库并汇总开发人员在为他们的项目选择工具之前要查找的数据的起点。它试图保持客观性,并尽可能少地进行价值判断。

它不会尝试选择“一个最佳库”或以自以为是的方式对软件包进行排名。相反,它总结了最受欢迎的Node.js查询生成器,ORM和数据库工具包,并描述了它们的项目运行状况。这是根据受欢迎程度,回购活动,开发人员支持和项目成熟度等条件完成的。

评估数据库库条件

本文将重点介绍最受欢迎的Node.jsSQL,ORM和数据库工具包。最后将简要考虑数据库驱动程序和较新的库。类型安全性和TypeScript支持不在本文范围内,将在以后的文章中进行评估。

图书馆将根据以下标准进行简要总结和评估:

标准描述评价者
人气度该库在开发人员中的受欢迎程度如何?GitHub的明星,NPM下载及复合增速逐月在NPM下载
回购活动回购中的开发有多活跃?提交,发布,合并的PR和GitHub问题
支持开发人员会得到很好的支持吗?文档质量,StackOverflow和Reddit状态,Gitter / Slack / IRC频道和GitHub问题
成熟度和稳定性这个项目有多新?是否稳定并得到支持者的支持?npm模块和GitHub存储库,维护,财务投资,企业支持和生产用例

本文考虑的数据月份为2020年8月7日至2020年9月7日。请注意,此页面上的软件包没有按照特定的顺序显示,这意味着该列表并不代表专门的排名。

此标准并不详尽,您应该选择最适合您的项目和编程偏好的工具。

SQL、SQL生成器、ORM

用于查询和操作数据的库可以大致分为三类,每类在不同的抽象级别上运行。

从最低到最高是:

  • 数据库驱动程序,客户端和连接器,例如node-postgres
  • SQL构建器(例如Knex.js)在数据库客户端之上运行,并允许您编写JavaScript代码来处理和查询数据
  • 诸如Sequelize之类的对象关系映射工具(ORM)和诸如Prisma之类的数据库工具包,使开发人员可以使用模型,与数据库表相对应的抽象实体

许多工具模糊了两者之间的界线,并在需要额外的灵活性或控制能力时允许开发人员降至较低的层次。要了解更多信息,请查阅Prisma的数据指南中的比较SQL,SQL构建器和ORM

Prisma

评估摘要

  • 人气:人气
  • 回购活动:非常活跃
  • 支持:强
  • **成熟度和稳定性:**较新
  • 支持的数据库:MySQL,PostgreSQL和SQLite(还有更多计划)

总览

Prisma与大多数ORM的不同之处在于,不是在类中定义模型,而是在Prisma模式(Prisma工具箱使用的主要配置和数据模型定义文件)中定义模型。在Prisma模式中,您定义数据源(如PostgreSQL数据库)和模型(如users和)posts以及它们之间的关系。使用此架构,Prisma会生成一个客户端,该客户端公开一个Create-Read-Update-Delete(CRUD)API,然后您可以使用该API查询数据库。该Prisma Client充当丰富的SQL构建器,您可以在Node.js应用中使用它来返回纯JavaScript对象,而不是模型类的实例。

人气度

PrismaPrisma GitHub存储库上有5.1k个星标,是Node开发人员中一种流行的数据库工具,可与Bookshelf.js和Objection.js等已建立的库相提并论,但不如Sequelize和TypeORM等拥有20k的库那么受欢迎GitHub明星。应当指出,Prisma只是在2020年6月才开始生产,而大多数其他工具已经问世了几年。

就npm下载而言,每月约有23.8万次下载,可与Bookshelf.js和Objection.js之类的工具相比,但与Sequelize,TypeORM和Mongoose不在同一层。但是,在本文考虑的所有主要工具中,它的增长速度都很高,npm下载每月增长率为7%。相比之下,大多数其他工具的每月增长率大约在4.5%左右,只有Bookshelf.js的增长率为8%。

**评价:**受欢迎

回购活动

可以肯定地说,Prisma GitHub存储库是本文考虑的所有工具中最活跃的。Prisma在本文考虑的数据月份中有194次提交,5个发行版和53个合并的PR,因此正在积极地进行大量开发,并频繁推送新功能,错误修复和更新。

**评价:**非常活跃

支持

尽管Prisma出现的时间还不及此处考虑的其他一些工具,但它得益于强大而活跃的开发人员支持网络。它的文档井井有条,正在积极扩展,并且非常详尽。

如果有问题,可以使用Prisma Slack频道,在其GitHub讨论页面上提问,或提交GitHub Issue,所有这些活动都很活跃。尽管没有太多可借鉴的StackOverflow问题库,但有关GitHub讨论和Reddit的已回答查询库不足以弥补这一不足。

**评价:**强

成熟度和稳定性

Prisma于2016年首次创建和发布,使其成为本文考虑使用的较新工具之一。它经历了多次迭代和重新设计,首先是Graphcool,即GraphQL后端即服务。Graphcool然后转入数据库和GraphQL工具,成为Prisma 1.0,这是一个非常受欢迎的项目,拥有1.9万个GitHub星。Prisma 2.0于今年早些时候在Beta中发布,然后摆脱了Prisma服务器和GraphQL层,成为今天的JavaScript和TypeScript ORM替代品。

Prisma 2.0是一个开源JavaScript数据库工具,由私有公司Prisma维护,支持和积极开发,该公司最近完成了1200万美元的A轮融资。Prisma雇用了专职工程师,开发人员拥护者,技术作家等来维护和构建Prisma。这意味着当将Prisma作为其JavaScript数据库接口实现时,可以确保开发人员将得到良好的支持。

**评估:**较新

数据库支持

Prisma当前支持PostgreSQL,MySQL和SQLite

特色功能

  • 直接使用JavaScript对象而不是类和实例
  • Prisma模式的“单一事实来源”,以减少对象关系阻抗不匹配
  • 类型安全的数据库查询
  • 自动生成的迁移(实验性)
  • 直觉关系API
  • VSCode插件
  • 自动补全支持

有关功能的完整列表,请参阅Prisma官方文档中的数据库功能

使用范例

关系查询(获取给定用户的所有帖子,给定用户的电子邮件):

const postsByUser = await prisma.user.findOne({ where: { email: 'alice@prisma.io' } }).posts()

概要

尽管Prisma是一种更新的数据库工具,并且经过多次迭代和重新设计,但其独特的,以架构为中心的体系结构与使用JavaScript类定义模型的典型ORM形成了鲜明的对比。它得益于获得资金支持的公司和付费开发人员的支持,以及活跃的支持社区和快速的开发周期。这是一个受欢迎的,快速增长的选择,并且一直存在。

Sequelize

评估摘要

  • 人气:非常受欢迎
  • 回购活动:有点活跃
  • 支持:平均
  • **成熟度和稳定性:**非常成熟
  • 支持的数据库:MySQL,MariaDB,SQLite和Microsoft SQL Server

总览

Sequelize是一个成熟的,基于承诺的成熟的Node.js ORM,它支持Postgres,MySQL,MariaDB,SQLite和Microsoft SQL Server。它遵循通过扩展Model类定义模型的传统ORM模式。然后使用类方法执行类似SELECTINSERT的操作。关系也使用类方法如hasMany()和定义belongsTo()

人气度

在所考虑的时间段内,Sequelize拥有22.8k GitHub star和300万次npm下载,是本文中考虑的最受欢迎的关系数据库ORM。它仍在增长,在过去6个月中,npm下载量每月增长4.4%。相比之下,第二受欢迎的关系数据库ORM是TypeORM,下载量为145万次。(Mongoose也很受欢迎,但仅支持MongoDB。)

**评价:**很受欢迎

回购活动

在所考虑的时间段内,发布了一个新版本的Sequelize,并在所有分支中推送了6次提交。2个PR被合并。这表明Sequelize并不处于休眠状态,而只是处于活跃状态。最近的大多数活动都是围绕错误和文档修复进行的。

**评价:**有点活跃

支持

已经存在了将近十年,您可能会通过StackOverflow或Reddit搜索找到对Sequelize的支持。它的文档内容丰富,包含许多用法示例,并且还对用法模式进行了一些理论上的讨论(例如,其Associations文档)。但是,Sequelize的GitHub Issues和Slack频道可能会有些用处,许多查询都无法回答。

**评价:**平均

成熟度和稳定性

Sequelize是可用的最成熟的节点ORM之一。它不再是一个快速变化的项目,并且最近的开发似乎主要集中在错误修复和文档更新方面。它是一个稳定的工具,完全依靠维护者和Sequelize社区的开源贡献。

根据其文档,它拥有一些著名的用户,例如WalmartLabs和Bitovi。

评价: 很成熟

数据库支持

Postgres,MySQL,MariaDB,SQLite和Microsoft SQL Server。它还使用外部程序包支持CockroachDB。

特色功能

  • 熟悉的ORM界面和ActiveRecord使用模式
  • 详细控制交易及其执行方式
  • 支持许多数据库
  • 能够使用多个只读副本
  • 渴望和懒惰的关系
  • 根据定义的模型同步数据库

有关功能的完整列表,请参阅Sequelize官方文档

使用范例

关系查询(特定用户的所有帖子,渴望加载):

const user = await User.findOne({
  where: {
    email: 'alice@sequelize.org',
  },
  include: Post,
})

概要

Sequelize是一个稳定的稳定ActiveRecord ORM,由于多年来的流行和大量使用,您可以期望从StackOverflow,Reddit和GitHub Issues等地方获得支持。但是,该项目最近停滞不前,似乎没有以前那么活跃。

TypeORM

评估摘要

  • 人气:非常受欢迎
  • 回购活动:活跃
  • 支持:好
  • **成熟度和稳定性:**成熟
  • 支持的数据库:MySQL,MariaDB,PostgreSQL,CockroachDB,SQLite,Microsoft SQL Server,Oracle,SAP Hana,sql.js

总览

TypeORM是受Hibernate影响的JavaScript和TypeScript ORM,可以在多个平台上运行,例如Node.js,Web浏览器和Cordova。它在构建时考虑了TypeScript和类型支持,并且支持两种主要的ORM架构模式:Data Mapper和Active Record,从而为开发人员提供了在这两种模式之间进行选择的灵活性。它还包括一个查询生成器。

人气度

自2016年发布以来,TypeORM迅速发展成为最受欢迎的JavaScript和TypeScript ORM之一。它在GitHub上拥有2.07万颗星,每月有140万次npm下载,使其成为Sequelize和Mongoose最受欢迎的ORM选择之一。

**评价:**很受欢迎

回购活动

TypeORM的GitHub存储库处于活动状态。在过去的一个月中,向所有分支推送了29个提交,并且合并了26个PR。似乎没有严格的发布时间表,最新的发布时间是9月10日,而先前的发布时间是5月。最近的提交包括文档补充和修改,错误修复,测试以及一些新功能的混合。

**评估:**活跃

支持

TypeORM的文档很好,但是它主要由最少的用法示例组成,并且熟悉ORM,并且假定数据库概念(例如迁移,关系)和ORM模式(例如,Data Mapper和Active Record)都可以使用。在使用TypeORM时,您应该准备寻找外部资源,并花一些时间学习不同的使用模式以在堆栈中有效地实现它。它有一个活跃的Slack社区,并具有中等程度的Reddit和StackOverflow的存在,但是使用GitHub问题不太可能获得太多帮助。

**评价:**好

成熟度和稳定性

尽管在成熟度上可以与Prisma相提并论,但TypeORM的设计自其最初发布以来就已经有所改变,它是为TypeScript构建的受Hibernate影响的ORM(也可以与JavaScript很好地兼容)。它完全依赖于开放源代码的贡献,但在OpenCollective贡献的年度预算中,大约有$ 10,000会得到一定的支持。著名的公司贡献者包括Cockroach Labs,Aplas和VoterCircle Inc.。

**评价:**成熟

数据库支持

MySQL,MariaDB,PostgreSQL,CockroachDB,SQLite,Microsoft SQL Server,Oracle,SAP Hana,sql.js

特色功能

  • 支持数据映射器和活动记录ORM模式
  • 强大而灵活的查询生成器
  • 强大的TypeScript支持
  • 关系的渴望和懒惰加载
  • 自动迁移生成
  • 交易支持
  • 支持许多数据库

有关功能的完整列表,请参阅TypeORM GitHub README

使用范例

查询特定用户在TypeORM中的所有帖子:

const userRepository = getRepository(User)
const user = await userRepository.findOne(id, {
  relations: ['posts'],
})

概要

TypeORM和Sequelize是两种最流行的关系数据库ORM。TypeORM与Sequelize的不同之处在于,它提供了更多的灵活性,允许您在不同的使用模式之间进行选择,并且还包括一个功能强大的查询生成器。TypeORM支持许多流行的数据库,尽管完全依赖于其开源贡献者,但该项目仍处于活动状态。

Mongoose

评估摘要

  • 人气:非常受欢迎
  • 回购活动:活跃
  • 支持:好
  • **成熟度和稳定性:**成熟
  • 支持的数据库:MongoDB

总览

Mongoose是用于MongoDB的流行且维护良好的Node.js对象建模工具。它允许您使用模式对数据建模,并且包括内置的类型转换,验证,查询构建和业务逻辑挂钩。

人气度

Mongoose是用于MongoDB数据库的最受欢迎的JavaScript数据建模工具。它在GitHub上拥有21.4万颗星,每月有410万次npm下载。

**评价:**很受欢迎

回购活动

Mongoose的GitHub存储库非常活跃。在过去的一个月中,跨分支机构进行了69次提交,并合并了9个PR。最近的提交集中在错误修复和添加测试上。次要版本似乎很频繁,在此期间考虑有6个版本。

**评估:**活跃

支持

Mongoose的文档包含有关其最常见操作(例如查询,创建模型和验证)的使用指南。其API文档还包含许多有用的代码片段。它有一个Slack和Gitter社区(尽管两者都相对安静),您可以期望在Reddit和StackOverflow上找到很多支持和技巧。它的GitHub问题部分也非常活跃,大多数问题都得到维护者或其他Mongoose用户的某种回应或支持。

**评价:**好

成熟度和稳定性

Mongoose自2011年以来一直存在,使其成为本文中考虑的最成熟的项目之一。如果您想将Node.js ODM与MongoDB结合使用,可以相信Mongoose界面不会发生根本变化,并且它将与MongoDB版本保持同步。它拥有大量开源资金支持,每年预算11万美元,完全来自OpenCollective贡献者。通过一系列收购,拥有Wordpress.com,Tumblr和Simplenote的公司Automattic继承了Mongoose。Terra Vera,SixPlus和Payment Ninja均使用Mongoose构建。

**评价:**成熟

数据库支持

MongoDB

特色功能

  • 您的NoSQL数据库的架构和模型
  • 验证器,中间件前后挂钩
  • 其他馆藏中的参考文件使用 populate()
  • 子文档:其他架构中的嵌套架构

有关功能的完整列表,请查阅Mongoose官方文档

使用范例

关系查询(获取给定用户的所有帖子,给定用户的电子邮件):

const userWithPosts = await User.findOne({ email: 'alice@mongoose.com' }).populate('posts')

概要

如果您将MongoDB数据库与Node一起使用,并且想使用ODM,Mongoose是一个不错的选择。这是一个受欢迎的成熟项目,将继续得到积极维护。它允许您定义用于对数据建模的模式,并提供诸如验证,类型转换,填充,中间件,自定义方法和查询帮助器之类的功能。

Bookshelf.js

评估摘要

  • 人气:人气
  • 回购活动:不是很活跃
  • 支持:平均
  • **成熟度和稳定性:**成熟
  • 支持的数据库:PostgreSQL,MySQL和SQLite

总览

Bookshelf.js是在Knex.jsSQL构建器库之上构建的Node.js ORM。它受Data Mapper ORM模式的启发,并提供了一个简化的界面,用于对数据进行建模和交互。

人气度

Bookshelf.js拥有6,000个GitHub星星,不如Sequelize和TypeORM受欢迎,但与Objection.js,Prisma和Waterline.js处于同一范围。它每月有40.8万次下载(与Sequelize的300万相比),这意味着,尽管它可能没有得到广泛采用,但它仍然拥有喜欢精简界面的开发人员的核心基础。它的增长速度也很高,npm下载量每月增长8%。相比之下,除Prisma(7%)外,大多数其他工具的月增长率大约为4.5%。

**评价:**受欢迎

回购活动

在过去的一个月中,Bookshelf仓库中没有提交,也没有发布,也没有合并的请求。最近的提交包括一些文档清理,更新,使其与Knex.js保持一致,以及一些测试。在撰写本文时,最新版本是1.2.06月7日。

**评价:**不太活跃

支持

Bookshelf的核心文档包括一个简短的快速入门指南和一些有关创建不同关系类型的代码段。但是,其API文档非常广泛,并包含许多用法示例。书架上有一个IRC频道,但其中只有7个成员,而且似乎很安静。同样,对StackOverflow和Reddit的支持也较轻。最好的选择是其GitHub Issues页面。

**评价:**平均

成熟度和稳定性

Bookshelf.js自2013年以来一直存在,并且在这一点上已经相当成熟。它的著名用户包括Ghost,Soapee,NodeZA,Sunday Cook和FlyptoX。它是一个开源程序包,维护人员很少,没有财务或公司的支持。

**评价:**成熟

数据库支持

PostgreSQL,MySQL和SQLite。

特色功能

  • 具有精简的ORM功能集的精益界面
  • 构建在Knex.js之上,因此可以下拉并根据需要使用查询生成器
  • 承诺和回调接口
  • 渴望和嵌套渴望的关系加载
  • 支持交易
  • 社区插件以扩展功能

有关功能的完整列表,请参阅Bookshelf.js官方文档

使用范例

关系查询(获取给定用户的所有帖子,给定用户的电子邮件):

const userWithPosts = await User.where(“email”,  “alice@bookshelf.js”).fetch({
    withRelated: [“posts”]
});

概要

Bookshelf.js是一个简化的ORM,可为您提供标准的数据建模,查询和操作工具集。由于它是建立在Knex.jsSQL构建器之上的,因此,如果发现自己受其接口的限制,则可以随时下拉并编写更多涉及的查询。它不像本文中考虑的其他一些工具那样活跃,但已经存在了很长时间,并且拥有喜欢其简化样式的核心用户群。

Objection.js

评估摘要

  • 人气:人气
  • 回购活动:有点活跃
  • 支持:好
  • **成熟度和稳定性:**成熟
  • 支持的数据库:SQLite,Postgres和MySQL

总览

自我描述Objection.js更像是一个“关系查询生成器”,而不是ORM。像Bookshelf.js一样,它是在功能强大的Knex.jsSQL构建器库的基础上构建的,因此可以在您始终可以使用的灵活SQL构建器的基础上构建类似于ORM的功能。由Objection.js库的创建者编写的对ORM Hatred的反对意见,简要总结了其设计目标以及它在原始SQL到ORM范围中的适用范围。

人气度

Objection.js拥有5500个GitHub星,每月有32.5万次npm下载,就受欢迎程度而言,其排名接近Bookshelf.js和Prisma,而Bookshelf则略高于该排名。它们都不如Sequelize和TypeORM受欢迎,后者的下载量都在20k以上,下载范围在100万以上。

**评价:**受欢迎

回购活动

在本文考虑的时间段内,Objection.js存储库具有7个提交和6个合并的PR。上次异议发布于8月16日,其中包括一些文档和错误修复。尽管不像Prisma和TypeORM这样的项目活跃,但它得到了积极维护。

评价: 有点活跃

支持

Objection的文档由使用指南组成,该指南涵盖了其主要功能,例如创建模型和关系,查询,事务,挂钩和验证。它还包含API文档和一本“食谱”,其中包含诸如联接和子查询之类的常见操作的示例。您不会在StackOverflow上找到太多帮助,但是该项目的Gitter相当活跃并提供支持,它在Reddit中的存在程度适中,并且其维护者经常响应GitHub问题。

**评价:**好

成熟度和稳定性

自2015年以来一直存在异议,这是一个成熟的项目。它似乎没有任何财务或公司支持,由开源社区维护。有关Objection.js的生产用例的列表,请参阅[谁在生产中使用objection.js?] (谁在生产中使用objection.js?)。

**评价:**成熟

数据库支持

SQLite,Postgres和MySQL

特色功能

  • 建立在Knex.js之上
  • 渴望加载
  • 交易支持
  • 根据JSON模式验证模型
  • 查询挂钩(前/后插入,更新等)
  • 图更新
  • 分页

有关功能的完整列表,请查阅Objection.js GitHub README

使用范例

关系查询(获取给定用户的所有帖子,给定用户的电子邮件):

const user = await User.query().findOne({
  email: 'alice@objection.js'
});

const posts = await user
  .$relatedQuery('posts');

概要

Objection.js与Bookshelf.js最相似之处在于,它在Knex.jsSQL构建器库的顶部构建了一组类似于ORM的功能。Objection.js似乎得到了更积极的维护和更好的记录,并且许多Objection.js开发人员以前曾根据[谁在生产中使用objection.js?] (谁在生产中使用objection.js?)与Bookshelf.js合作。

Waterline

评估摘要

  • 人气:人气
  • 回购活动:不是很活跃
  • 支持:平均
  • **成熟度和稳定性:**成熟
  • 支持的数据库:MySQL,PostgreSQL,MongoDB。通过社区适配器:Redis,MS-SQL,Oracle等。

总览

Waterline是Sails Node.js框架中使用的默认ORM。其设计的一部分是允许您使用“一次写入,随处使用”数据操作代码,以便无论数据位于MySQL,PostgreSQL,MongoDB还是其他数据库中,您都可以编写代码来查询或操作数据。

人气度

Waterline是一个受欢迎的ORM,拥有5.2k GitHub star和每月124k npm下载。但是,其下载量的增长速度低于本文中考虑的其他库,过去六个月的月平均增长率为1.33%(大多数约为4%)。其124k npm的下载量也大约是Bookhelf.js,Prisma和Objection.js之类的下载量的一半。

**评价:**受欢迎

回购活动

最近,Waterline的GitHub存储库似乎不太活跃,在考虑的数据月份中,0提交和合并的PR。它的最新版本是5月29日,之前的发布是在2019年2月。此最新版本包含一个提交错误修正。

**评价:**不太活跃

支持

如果您遇到Waterline的任何问题,您很可能会独自一人。它的文档在Sails.js文档中仅包含一小部分,尽管它的API记录了很多,并包含许多用法示例。您可以在Sails Gitter(似乎很活跃)上并使用GitHub Issues找到其他支持,尽管它将在Sails框架GitHub Issues页面上。不过,可能要过一段时间才能得到问题的答案,或者会为您的错误推送修复程序。

**评价:**平均

成熟度和稳定性

自2013年以来,Waterline已经存在,并且是具有稳定API的成熟软件包。作为Sails.js JavaScript框架的一部分,它由Sails公司管理和维护,该公司是一家由种子基金资助的私人公司,并在Y Combinator启动孵化器中孵化。Sails.js是Verizon,Postman,JetBlue等使用的流行JavaScript框架,但尚不清楚有多少生产用例依赖于独立的Waterline库。

**评价:**成熟

数据库支持

MySQL,PostgreSQL,MongoDB。通过社区适配器:Redis,MS-SQL,Oracle等。

特色功能

  • 编写与数据库无关的代码
  • 填充模型之间的关系,即使不同模型的数据位于不同的数据库中

有关功能的完整列表,请参阅Waterline ORM GitHub README

使用范例

关系查询(获取给定用户的所有帖子,给定用户的电子邮件):

const userWithPosts = await User.find({ email: 'alice@waterline.js' }).populate('posts')

概要

Waterline是Sails.js JavaScript框架的内置ORM / ODM,因此,其主要目标是无需重写代码即可支持多种数据库类型(关系型和NoSQL型)。最近几个月,该项目陷入停滞,并且支持不如本文中考虑的其他一些库那样强大。

Knex.js(查询生成器)

评估摘要

  • 人气:非常受欢迎
  • 回购活动:活跃
  • 支持:好
  • **成熟度和稳定性:**成熟
  • 支持的数据库:PostgreSQL,Amazon Redshift,MySQL,MariaDB,SQLite,MSSQL

总览

Knex.js是一个Node.js查询生成器(不是ORM),它支持多个数据库,并包括事务支持,连接池和流接口等功能。它使您可以在数据库驱动程序之上的级别进行工作,而不必手工编写SQL。但是,由于它是一个较低级别的库,因此希望熟悉SQL和关系数据库的概念,例如联接和索引。

人气度

Knex.js拥有2.9万个GitHub星,每月有250万次npm下载,是一个非常受欢迎的JavaScript查询生成器。

**评价:**很受欢迎

回购活动

在考虑的数据月份中,Knex.js在所有分支机构中推送了17次提交,并在14个合并了PR中进行了提交。发行了2个新版本的库。最近的提交包括错误修复和测试改进。

**评估:**活跃

支持

Knex.js的文档主要由其API的完整文档组成,该文档虽然内容广泛,但相当精简。期望熟悉关系数据库,SQL及其核心功能集(联接,事务,连接等)。它托管了一个似乎处于休眠状态的IRC通道,但是您可以在StackOverflow和Reddit上找到一些支持。它的GitHub Issues页面似乎非常活跃,因此您可以确保项目维护者可以查看您的查询。

**评价:**好

成熟度和稳定性

自2013年以来,Knex已经存在,并且是一个成熟的项目。它被设计为支持多个数据库驱动程序的“包含电池”的JavaScript查询生成器,自那时以来,其界面并没有太大变化。这是一个完全由社区维护的开源项目,尽管它不如本文中考虑的其他一些库那么活跃,但次要发行版非常频繁,少数贡献者继续推动对该库进行修复和改进。

**评价:**成熟

数据库支持

PostgreSQL,Amazon Redshift,MySQL,MariaDB,SQLite,MSSQL

特色功能

  • 回调和承诺界面
  • 流接口
  • 查询和架构生成器
  • 交易支持
  • 连接池
  • 标准化不同查询客户端和方言之间的响应

有关功能的完整列表,请参阅knex.js GitHub README

使用范例

JOIN查询(获取给定用户的所有帖子,给定用户的电子邮件):

const posts = await knex('posts')
  .join('users', { 'users.id': 'posts.user_id', 'users.email': 'alice@knex.js' })
  .select('*')

概要

Knex.js与本文中考虑的大多数数据库工具不同,因为它不是位于数据库上方用于模型化数据的ORM或抽象层。它是一个功能强大且灵活的查询生成器,可充当数据库驱动程序的包装器,使您可以简化一些查询并删除样板SQL。它是最流行的“纯” JavaScriptSQL构建器,并且是一个积极维护的成熟项目。

其他著名的图书馆

本文重点介绍了一些最受欢迎的Node.js ORM,数据库工具和查询生成器,但是您可能希望为项目考虑其他几种工具:

MassiveJS

MassiveJS是PostgreSQL的Node.js数据库工具,可构建用于处理数据库的抽象,但不是具有模型和实体的成熟ORM。与Prisma相似,它可以连接到数据库并进行内部检查以为数据库中编码的数据模型构建API。它包括动态查询生成器和事务支持,并且是为PostgreSQL设计的,因此支持其独特的功能集,例如数组字段和操作,正则表达式匹配,外部表和实例化视图。

微型ORM

Mikro-ORM是更新的TypeScript ORM,它也支持普通JavaScript。由于它主要是TypeScript ORM,因此本文并未对其进行全面评估。Mikro-ORM是一个快速发展的项目,在GitHub上非常活跃,并得到其开发人员的大力支持。受Doctrine(PHP ORM)的影响,它是受Data Mapper,Identity Map和工作单元影响的ORM。它的一些功能包括自动事务处理,对多个数据库的支持,基于Knex.js的内置查询生成器以及模式和实体生成器。

斯洛尼克

Slonik位于node-postgres数据库驱动程序之上的某个级别。它是一组实用程序的集合,这些实用程序内置了类型安全性,查询模拟,连接和事务处理,详细的日志记录,值插值以及许多其他功能。您仍然必须编写原始SQL,但是它旨在在使用PostgreSQL数据库时提高安全性和效率。该库于2017年发布,至今仍非常活跃并在GitHub上受支持。

数据库驱动程序

数据库驱动程序位于抽象频谱的最低层,可以使用其查询语言直接与数据库交互。概述每个Node.js数据库客户端都超出了本文的范围,但是为了方便起见,这里列出了主要的数据库驱动程序:

结论

摘要信息图

本文总结了最受欢迎的Node.js ORM,数据库工具包和查询生成器。他们作为开源项目的健康状况是根据存储库贡献和开发人员支持等标准进行评估的。

它并不是用来选择Node.js数据库接口的详尽框架,而其他因素(如程序包的编程接口,设计,对数据库功能的支持以及灵活性)比此处评估的许多标准更为重要。不同的Node.js项目可能需要不同的工具。