Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • J jz-api-core
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • Deployments
    • Deployments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Repository
    • Value stream
  • Wiki
    • Wiki
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar
  • jizhi-backend
  • jz-api-core
  • Wiki
  • jz backend project skeleton

Last edited by xigua Jul 16, 2017
Page history

jz backend project skeleton

积致后端宝项目简要框架目录结构 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);
}
  • cron Job - 很多应用需要在某个时间进行数据统计等工具,具体详见lib/cron.ts
  • 剩下的用户自定义API接口可以自行在 graphql/__custom.ts 文件中进行添加
Clone repository
  • Home
  • jz backend project skeleton