orm2 中文文档

译者:飞龙

来源:Object Relational Mapping

安装

  1. npm install orm

所支持的Node.js版本

支持 0.8, 0.10, 0.12, iojs-1.5 。

0.10.x0.12.xiojs-1.5 版本的测试在 Travis CI 上运行。如果你想要的话,可以在本地运行测试:

  1. npm test

DBMS 支持

  • MySQL & MariaDB
  • PostgreSQL
  • Amazon Redshift
  • SQLite
  • MongoDB (beta版,到现在为止缺少聚合)

特性

  • 创建模型,同步,删除,批量创建,获取,查找,移除,计数,聚合函数
  • 创建模型的关联,查找,检查,创建和移除
  • 定义自定义的验证器(有一些内建的验证器,会在保存之前检查实例的属性 — 详见enforce
  • 模型实例的缓存和一致性(两次获取表中的一行,获取到相同的对象,修改其中一个就是修改全部)
  • 插件:MySQL FTSPagination (分页),Transaction (事务),Timestamps (时间戳),Migrations (迁移)

介绍

这是一个 Node.js 对象关系映射模块。

示例:

  1. var orm = require("orm");
  2. orm.connect("mysql://username:password@host/database", function (err, db) {
  3. if (err) throw err;
  4. var Person = db.define("person", {
  5. name : String,
  6. surname : String,
  7. age : Number, // FLOAT
  8. male : Boolean,
  9. continent : [ "Europe", "America", "Asia", "Africa", "Australia", "Antartica" ], // ENUM type
  10. photo : Buffer, // BLOB/BINARY
  11. data : Object // JSON encoded
  12. }, {
  13. methods: {
  14. fullName: function () {
  15. return this.name + ' ' + this.surname;
  16. }
  17. },
  18. validations: {
  19. age: orm.enforce.ranges.number(18, undefined, "under-age")
  20. }
  21. });
  22. // add the table to the database
  23. db.sync(function(err) {
  24. if (err) throw err;
  25. // add a row to the person table
  26. Person.create({ id: 1, name: "John", surname: "Doe", age: 27 }, function(err) {
  27. if (err) throw err;
  28. // query the person table by surname
  29. Person.find({ surname: "Doe" }, function (err, people) {
  30. // SQL: "SELECT * FROM person WHERE surname = 'Doe'"
  31. if (err) throw err;
  32. console.log("People found: %d", people.length);
  33. console.log("First person: %s, age %d", people[0].fullName(), people[0].age);
  34. people[0].age = 16;
  35. people[0].save(function (err) {
  36. // err.msg = "under-age";
  37. });
  38. });
  39. });
  40. });
  41. });

Promise

你可以使用开启Promise的包装库

Express

如果你使用了Express,你可能想使用这一简单的中间件,使集成变得更容易。

  1. var express = require('express');
  2. var orm = require('orm');
  3. var app = express();
  4. app.use(orm.express("mysql://username:password@host/database", {
  5. define: function (db, models, next) {
  6. models.person = db.define("person", { ... });
  7. next();
  8. }
  9. }));
  10. app.listen(80);
  11. app.get("/", function (req, res) {
  12. // req.models is a reference to models used above in define()
  13. req.models.person.find(...);
  14. });

你可以多次调用orm.express来获取多个数据库的连接。在多个连接之间定义的模型会在req.models中连接。不要忘记在app.use(app.router)之前使用它,最好在你的公共素材文件夹之后。

示例

请见examples/anontxt,里面有一个基于express的应用示例。