我一直在使用ORM的活动记录和数据映射器实现,足以了解在我的大型项目中使用活动记录实现的ORM的问题。现在我正在考虑将我的一个项目迁移到node.js并尝试找到我现在正在使用的类似工具。经过研究,我没有发现任何遵循数据映射器模式的node.js ORM。他们都是积极的记录。也许我错过了一些东西,你可以告诉我,node.js是否有一个很好的流行ORM,它不遵循活动记录模式?
我看过的图书馆:
答案 0 :(得分:18)
在经历了当前存在的JavaScript的ORM之后,我编写了自己的ORM,支持TypeScript / ES6 / ES5并遵循数据映射器模式和所有其他最佳实践 - TypeORM
答案 1 :(得分:2)
我为Node.js编写了一个名为node-data-mapper的ORM;它可以在这里找到:https://www.npmjs.com/package/node-data-mapper。这是使用数据映射器模式的Node.js的ORM。开发人员在读取和写入数据库时使用普通的旧JavaScript对象。表格之间的关系没有严格定义,这使得加入非常灵活 - 在我看来,无论如何 - 尽管有点冗长。实际的数据映射算法快速而简短,复杂性是线性的(从表格DB数据到规范化JavaScript对象的转换是在一个循环中完成的。)
我也尽力使其具有相当的容错能力。有100%的代码覆盖率,虽然我知道并没有证明没有缺陷,但我确实尝试尽可能彻底地进行测试。
我在Doctrine 1之后非常松散地建模了界面。(我已经相当广泛地使用了LINQ,Doctrine 1和2,以及Hibernate,而那些ORM我最喜欢Doctrine 1的界面.node-data-mapper是但是,无论如何都不是Doctrine的JavaScript端口,并且界面明显不同。)查询接口使用deferred模块返回promises。
我在MongoDB的条件之后建模了条件(例如WHERE和ON子句)。希望这使得条件有点直观,同时提供了一种制作可重用查询的方法(特别是可以以多种不同方式安全过滤的复杂SELECT查询)。这些条件被视为特定于域的语言,并被排除,解析和编译。
无论如何,这个模块是我在个人项目中使用的东西,但我很乐意从社区中的其他开发者那里获得一些反馈!我试图提供大量的例子来让人们快速上手。目前该模块仅支持MySQL,但我正在努力增加对MSSQL的支持。
答案 2 :(得分:-7)
数据映射器模式和活动记录之间的区别在动态语言(例如JavaScript)中确实没有意义。 通常,数据映射器在类型语言中更轻量级,但在JS中它并没有真正有所作为。 从我的头脑中,我可以提到两个非常受欢迎的项目,你可能不知道:
Waterline.js是一个Sails抽象,在许多数据库系统上运行良好。
如果您考虑将MongoDB用于您的数据库 - Mongoose.js。