Node.js —— Waterline的介绍和使用

来源:互联网 发布:数字摇奖软件 编辑:程序博客网 时间:2024/06/13 13:20

一、ORM 的基本概念

1、Object Relational Mapping

2、将文档数据库中的一个文档,关系数据库表中的一行,映射为 JavaScript 中的一个对象

3、操作对象,便可以完成对数据库的操作

二、Waterline 的特点与优势

1、支持大部分的主流数据库

2、脱离 SQL

3、使用同样的代码操作不同的数据库

4、易于理解的符号

5、丰富的方法

6、多样的数据库类型

三、与Mongoose比较

1、支持更多的数据库

2、提供比 Mongoose 更丰富的 CURD 方法

3、更丰富的数据校验方法

四、Waterline 中的主要概念

1、适配器

将统一的操作代码,转换为某种数据库所支持的数据库操作

2、连接

通过某个适配器,及对应的连接信息,来建立一个与数据库的实际连接

3、数据集合

1、定义具体的数据类型2、类似于 Mongoose 中的 Model3、具体对应关系数据库中的表,和文档数据库中的集合

4、校验器

1、执行数据检查2、使用的是 Anchor https://github.com/sailsjs/anchor3、预定义的数据校验器,支持常规检查、时间检查、经纬度坐标检查、Email地址检查等4、支持自定义数据校验器

5、生命周期回调

1、创建时:beforeValidate/afterValidate/beforeCreate/afterCreate2、更新时:beforeValidate/afterValidate/beforeUpdate/afterUpdate3、删除时:beforeDestroy/afterDestroy

五、Waterline 在 express 中的使用(步骤解析)

1、配置文件,包括适配器和连接

var wlconfig = {  // 适配器  adapters: {    mongo: mongoAdapter,    default: 'mongo'  },  // 连接  connections: {    mongo: {      adapter: 'mongo',      url: config.mongodb    }  }};

2、创建数据集合

module.exports = Waterline.Collection.extend({  identity: 'post',  connection: 'mongo',  schema:true,  attributes: {    title: {type: 'string'},    content: {type: 'string'}  }});

3、实例化Waterline

var orm = new Waterline();

4、将数据集合加入waterline.object

orm.loadCollection(Post);

5、进行waterline.object的初始化

waterline.orm.initialize(waterline.wlconfig, function(err, models){  if(err) {    conole.log('waterline initialize failed, err:', err);    return;  }

6、利用express中间件,将数据集合附加到请求对象req中

app.set('models', models.collections);

7、编写控制器controller

module.exports = {  create: function(req, res, next){    // 先判断两个参数是否都是存在的    if(!req.query.title || !req.query.content) {      return next(new Error("params error"));    }    console.log('req.models:', req.models);    req.models.post.create({title: req.query.title, content: req.query.content}, function(err, doc){      if(err) return next(err);      return res.json(doc);    });  }};

8、编写路由route

var PostController = require('../controllers/post.server.controller');module.exports = function(app){  app.route('/post/create')    .get(PostController.create);};

参考文档:

https://github.com/balderdashy/waterline/tree/master/example

https://sailsjs.com/documentation/concepts/models-and-orm/model-settings