koa2 + graphql + typescript + jwt + typeorm的nodejs项目

最近写了一个node项目,主要使用到的技术有:前端

koa2  // nodejs 框架
koa-router // koa路由
graphql // 查询api
typescript // 强类型语言
jwt // 受权
typeorm  // typescript的一个orm
mysql2  // 内容数据库
mongodb  // 日志存储数据库
redis  // 服务器缓存

项目结构:
图片描述node

conf目录(配置项目录,包含db配置、服务启动端口配置、服务启动入口文件server.ts)
release目录(编译后目录)
src(项目主要源码目录)
    controllers(控制器)
    core(核心扩展)
    database(db链接)
    entities(mysql/mongodb的数据模型)
    middlewares(koa中间件)
    models(其余一些数据的模型)
    routes(路由)
    schema(graphql的schame)
    utils(辅助库目录)
    app.ts项目入口文件

该项目使用了koa的路由,能够同时支持普通RESTful和graphql两种类型apimysql

目前受权使用jwt模式,为了登出,也是用了redis辅助保存用户会话信息(醉了...)git

在graphql项目中,只须要后端定义好返回数据模型,前端按照本身须要的数据去查询接口,返回无冗余数据,很是简洁方便。github

graphql定义及各类各样的好处就很少说了,直接看实战结果吧。redis

GraphQL示例sql

// 查询
{
  count
  articles{
    list{id,title}
    meta{page,page_size}
  }
}

// 结果
{
  "data": {
    "count": 3,
    "articles": {
      "list": [
        {
          "id": "594459f050bcc2abbbf5116ed301b002",
          "title": "Laravel 5.6 是继 5.5 以后 Laravel 官方发布002"
        },
        {
          "id": "594459f050bcc2abbbf5116ed301b003",
          "title": "Laravel 5.6 是继 5.5 以后 Laravel 官方发布003"
        },
        ...
      ],
      "meta": {
        "page": 1,
        "total": 24
      }
    }
  }
}

前端异步请求截图:mongodb

请求数据
clipboard.pngtypescript

返回结果数据库

clipboard.png

从结果看,返回的数据彻底是按照本身的须要进行查询返回的

项目地址:https://github.com/xpioneer/k...

目前只是第一版,还未完善整个工程项目,总体架构还须要调整,但能够跑通整个流程了!

欢迎star项目,也欢迎指正~~

相关文章
相关标签/搜索