指导规范

全局函数

全局函数都定义在 App/Common/common.js 文件中,函数名为驼峰式命名。如:

// 全局函数定义
global.getPicModel = function(groupId){
    var model = D('Model');
    //extra code
}

这样函数 getPicModel 在控制器里就可以直接使用了。

类文件

所有的类文件都通过函数 Class 来创建,没有特殊情况,直接赋值给 module.exports。如:

//require 模块放在 module.exports 前面
var marked = require("markded");
var toc = require("marked-toc");

module.exports = Class(function(){
    // 类里面用到的一些变量放在这里,最好不要放在 Class 之外
    var keyList = { }
    return {
        init: function(){

        }
    }
});

如果创建的类还有一些属性或者方法,那么可以重新定义一个变量,如:

var App = module.exports = Class(function(){...})
//listener 方法
App.listener = function(){}

ThinkJS 里包装了很多功能的基类,如:Model, Db, Controller,需要开发这些功能时,可以直接继承这些基类。

异步

ThinkJS 是基于 es6-promise 来实现的,大大简化了异步回调的代码逻辑。如果你的项目比较复杂,需要开发一些独立的模块,建议也使用 promise 的方式。

ThinkJS 提供了 getDefer() 获取 deferred 对象,getPromise() 获取 promise 对象。参见如下示例:

// 获取页面内容
function getPageContent(){
    var deferred = getDefer();
    request.get('http://www.ThinkJS.org', function(err, response, body){
        if(err || response.statusCode !== 200){
            deferred.reject(err || new Error('statusCode:' + response.statusCode))
        }else{
            deferred.resolve(body);
        }
    })
    return deferred.promise
}