积致后端宝项目简要框架目录结构 v1.0
项目主要技术
- typescript 2.0.3+
- Node.js v6.0+ Prefer 8.x
- Hapi.js 13.5+
- jsonwebtoken v7.1.7+ with hapi-auth-jwt2 7.0.1+
- Mongo DB 3.2+ (为了运行项目,本地需要安装mongo,可以使用docker) with Mongoose 4.6.1+
- graphql 0.9.1+
- node-cron 1.1.3+ for cron job
项目主要目录结构
- config - config文件目录,主要配置在config.dev.json文件中,production环境的config文件在config.production.json中
- customCode - 目前只包含一个customHooks.ts文件,具体见下
- dbschema - 包含所有entity的定义json文件
- graphql - 所有graphql的定义文件,其中__common.ts是一些基础逻辑,不要修改,可以自行添加的graphql定义在__custom.ts文件中。其它的ts文件内容为后端宝自动生成,一般也不要去改,改了之后要commit到git,以后系统生成文件有变化的时候,要做好merge和resolve conflict的工作。
- lib - 各种项目开发者可以自行添加的库文件,现有的一些文件也可以修改使用
- cron.ts - cron job,中有例子,若部署到多个instance,则需要一个switch避免重复执行问题
- faker.ts - 虚假数据生成工具,配合graphql的generateFakeData mutation使用
- fixture.ts - 系统启动时自动调用的,主要用户创建默认admin用户
- helper.ts - 一些辅助功能逻辑
- userService.ts - 一些可以修改的用户相关逻辑,比如用户登录,修改密码等
- routers - 绝大部分API都是通过graphql,只有少数在routers目录下建立新目录,现在的file.ts用于文件上传,可以配合oss使用
- index.ts - main文件,一般不需要修改
项目开发指南
- 一般的项目框架生成之后,在后端宝指定数据表的名称和字段,后端宝会自动在dbschema目录下生成对应的json描述文件,用于与mongoose hookup到一起
- 后端宝还会在graphql目录下生成对应的graphql文件,一般项目自定义的graphql query和mutation应定义在__custom.ts文件中
- 大部分业务逻辑可以通过编写entity的hook来实现,系统提供了以下hook类型,所有hook都有resolve,reject,result,err, context这五个参数。其中resolve必须保证在希望继续的分支下进行调用,reject必须在出错的分支下进行调用,result指代调用的参数object或者查询的结果。context是执行上下文object,具体参考jz-api-core文档中的描述
- BeforeQueryItem - 根据id获取某实例前
- AfterQueryItem - 根据id获取某实例前
- BeforeQueryList - 查询entity列表前
- AfterQueryList - 获取entity列表之后,这时result就是要返回的entity list对象
- BeforeSave - 保存前,这时result是当前将要被保存到数据库的object
- AfterSave - 保存成功之后,result是被保存成功的对象
- BeforeUpdate - 到数据库更新entity之前
- AfterUpdate - 到数据库更新entity之后
- 具体的某个entity的写法就是在这8个hook前加上entity type的名字,比如 blogBeforeSave, messageAfterSave,下面是一个例子
export const messageBeforeSave = (resolve, reject, result, err, context: Common.Context) => {
let me = context.me;
result['fromUserId'] = me._id;
resolve(result);
}