Sequelize 一个功能强大的针对NodeJS的ORM框架(对象关系映射)
发布在前端乱炖官网技术架构2013年10月22日view:21794
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

文档地址:http://static.html-js.com/sequelizejs/index.html (官方文档被GFW干掉了,需要翻墙看,这是我自己扒下来的)

关于什么是ORM,自行研究,用了ORM之后会少写很多代码,基本不用写sql,还有程序结构会更加清晰明了,具体可以看本站的源代码中得 models部分:https://github.com/xinyu198736/htmljs

这里就讲一下本站是如何使用 SequelizeJS的。

一开始用Sequelize的时候,其实我都不知道什么是ORM,只是听说这么个名词,然后去看了下,觉得好像非常有用,于是就开始尝试用,后来用的时间长了,嫣然离不开这个东东了。

不过Sequelize还是有很多地方不够完善的,比较复杂的项目还是要慎用,功能也在不断更新中,有些实验性功能偶尔会有bug。我现在自己用的版本就是自己修改过的,对一些实验性功能进行了加强。最近的新版增加了很多新的很炫的功能,可惜我不能用了,因为新版的试验性功能还是有一些bug。。。

我网站的代码结构分成了 五层,在github上有所描述,这里扒下来。

  • models,使用sequelize将数据库操作抽象化,使用其规定格式定义数据对象,完全不需要关心数据库的问题。
  • functions,在sequelize上又一层操作封装,主要是各种数据操作,将其封装,供不同的routes或者filters调用。
  • filters,一些复用route的合集,例如用户检查,权限检查,通用module,总之就是各种抽象。
  • routes,逻辑的最顶层,负责请求调度,一个请求经过filters,获取到通用数据,然后进去各自的routes,在routes里调用functions方法操作和获取models定义的数据。然后把数据显示在views上或者直接返回给用户。
  • views,在routes里调用,使用数据渲染页面

其中和Sequelize有关的部分就是 models和functions。其中models是用来定义数据的,基本一个model定义对应一个数据库的字段,定义方法见文档,我网站为了开发速度快,定义的很宽泛,其实这样是不对的,勿学习。

这里展示一个简单的例子把:

module.exports =
  id:"int"
  title:"varchar(300)"
  md:"text"
  html:"text"
  user_id:"int"
  user_headpic:"varchar(255)"
  user_nick:"varchar(50)"

其实就是个json对象,我这里用模块的方式写 是为了方便加注释。

定义一个model对象之后,就可以映射到数据库的一个表,而且你不用手动创建表,之后的js代码,可以自动创建不存在的表。

从model配置生成映射对象的工作是在 functions里面的,每个配置可以多次初始化,不会冲突 。

初始化方法:

Sequelize = require("sequelize")
global.sequelize = sequelize = new Sequelize(config.mysql_table, config.mysql_username, config.mysql_password,
  define:
    underscored: false
    freezeTableName: true
    charset: 'utf8'
    collate: 'utf8_general_ci'
  host:config.mysql_host
)
OBJ = sequelize.define modelName, require path.join config.base_path,"models",modelName+config.script_ext

为什么在我的functions里面找不到这些代码呢,因为我把这些常用的操作都封装成全局方法和对象了。

具体代码在:lib/modelLoader.coffee中

这里封装了很多常用的操作数据的方法。

我现在已经离不开sequelize了,也推荐大家使用。

评论
发表评论
暂无评论
WRITTEN BY
芋头
思考,去做,做好,做的比别人好
TA的新浪微博
PUBLISHED IN
前端乱炖官网技术架构
介绍一些本站的技术选型,本站源代码都在:https://github.com/xinyu198736/htmljs

友情链接 大搜车前端团队博客
我的收藏