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項目,也歡迎指正~~

相關文章
相關標籤/搜索