ThinkJs(https://thinkjs.org/)是个非常不错的NodeJs的MVC开发框架,它本身提供了操作多种数据库的方法,但目前还不支持MSSQL数据库,而我在做开源项目CmPage(http://git.oschina.net/defans/cmpage)的时候,为了提高一点开发效率,觉得还是用熟悉一点的数据库较好,而且很多场景的数据处理用SQL语言的话可以很简练,因此问题就来了,在thinkjs中如何操作mssql 并且和 thinkjs 本身的数据库操作方法在一定程度上兼容呢?
网上查了一下,目前较好地用Promise方式来实现MSSQL连接的ORM框架是 Sequelize,虽然我没有用到ORM的特性,数据操作还是SQL语句拼接后用 query 方法执行,但难保以后不会改变主意,因此基本思路就有了: 从 think.base 继承类,然后加入 sequelize ,实现 think.model.base 的一些方法,如 add,update,where,find,select等等,为了可以链式调用,在 field 和 where 方法中返回自身(return this;),而为了实现子类中能够这样调用:this.model('t_emp').xxx,也实现了model方法,以上方法的实现逻辑很简单,就是定义一些成员变量表示SQL语句的各部分组成,比如:tableName,fields,_where,pk等;然后在相应方法中赋值后返回自身(this)。具体请参见代码: http://git.oschina.net/defans/cmpage/blob/master/src/cmpage/model/base.js?dir=0&filepath=src%2Fcmpage%2Fmodel%2Fbase.js&oid=10eba62a6f3ab3de95d3aeb8530a5fedc3ad518e&sha=10eb12139d697c1d4f25125e64966b029c2cf97e
如果以后 thinkjs 实现了mssql想换回来的话也很简单,把 page.js 改为从 think.model.base 继承就可以了。
还是在这里贴一下代码吧:
'use strict';
// +----------------------------------------------------------------------
// | CmPage [ 通用页面框架 ]
// +----------------------------------------------------------------------
// | Licensed under the Apache License, Version 2.0
// +----------------------------------------------------------------------
// | Author: defans <defans@sina.cn>
// +----------------------------------------------------------------------
/**
@module cmpage.model
*/
/**
* 业务模块的基类,通过ORM框架