首页 > Web开发 > 详细

【sequelizejs实战】sequelizejs -DataTypes 添加OBJECTID类型

时间:2015-04-20 19:25:06      阅读:318      评论:0      收藏:0      [点我收藏+]

sequelizejs -DataTypes 添加OBJECTID类型

概述

在数据库的主键的编码上,sequelizejs支持自增和uuid等方式,但这些主键的定义都各有优缺点,在使用过MongoDB之后,十分欣赏mongoDB的ObjectId生成的方式,以此作为主键对于分布式的应用更加友好,因此将sequelizejs 拓展,进行支持objectID。

引入BSON

在项目中引入BSON,建议在sequelizejs目录中进行安装。

npm install BSON -save

BSON 安装后会即时编译。因此需要提前安装编译所需的环境。

拓展DataTypes

在data-type.js中添加代码:

/**
 * A column storing a OBJECTID univeral identifier.
 * @property OBJECTID
 */
var OBJECTID = function() {
  if (!(this instanceof OBJECTID)) return new OBJECTID();
  ABSTRACT.apply(this, arguments);
};
util.inherits(OBJECTID, ABSTRACT);

OBJECTID.prototype.key = OBJECTID.key = ‘OBJECTID‘;

设置模块接口:

module.exports = {
   ....
  OBJECTID:OBJECTID,
  ....
};

设置数据类型默认值
在utils.js中引入Bson模块:

  var Bson=require(‘bson‘);

在utils.js中修改toDefaultValue方法:

  toDefaultValue: function(value) {
    if (lodash.isFunction(value)) {
      return value();
    } else if (value instanceof DataTypes.UUIDV1) {
      return uuid.v1();
    } else if (value instanceof DataTypes.UUIDV4) {
      return uuid.v4();
    } else if (value instanceof DataTypes.NOW) {
      return Utils.now();
    } else if (value instanceof DataTypes.OBJECTID) {
      return Bson.ObjectID().toString();
    } else {
      return value;
    }
  },

使用

定义的数据模型的时候,指定typeDataTypes.STRING,设置defaultValueDataTypes.OBJECTID,插入数据库时候会将默认值生成OBJECTID格式的字符串;

module.exports = function(sequelize, DataTypes) {
  var User = sequelize.define("User", {
    id:{
      type: DataTypes.STRING,
      defaultValue: DataTypes.OBJECTID,
      primaryKey: true, // 定义主键
      comment: "OBJECTID主键"
    },
    name: {
        type:DataTypes.STRING, //字符串,默认长度 255,
      comment: "用户姓名"
    },
    account: {
      type:DataTypes.STRING,
       validate: {
        isEmail: {
          msg: "用户账号必须是邮箱!"
        },
      },
      comment: "用户账号,使用邮箱注册"
    },
    pwd: {
      type:DataTypes.STRING,
      comment: "用户密码,使用MD5"
    }
  );

  return User;
};

【sequelizejs实战】sequelizejs -DataTypes 添加OBJECTID类型

原文:http://my.oschina.net/xqx/blog/403943

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!