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
This is an old version of this page. You can view the most recent version or browse the 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);
}
Clone repository
  • Home
  • jz backend project skeleton