Koa+Mysql2+GraphQL腳手架 koa-shelf

?同學發表於2019-03-21

簡介

GraphQL 既是一種用於 API 的查詢語言也是一個滿足你資料查詢的執行時。 GraphQL 對你的 API 中的資料提供了一套易於理解的完整描述,使得客戶端能夠準確地獲得它需要的資料,而且沒有任何冗餘,也讓 API 更容易地隨著時間推移而演進,還能用於構建強大的開發者工具。

優點:

  1. 請求你所要的資料不多不少
  2. 獲取多個資源只用一個請求
  3. 描述所有的可能型別系統
  4. 強大的開發者工具
  5. API 演進無需劃分版本

本篇文章中將搭配Koa實現一個GraphQL的腳手架,配合Mysql2實現一個簡單的腳手架

專案結構如下所示

.
├─app
│  ├─dao // 使用資料庫
│  │  └─common // 資料庫查詢插入公共元件
│  ├─resolver // graphql的回撥函式
│  ├─routes // 書寫普通介面
│  ├─schema // graphql的配置檔案
│  └─utils // 配置公共模組
└─config // 配置檔案
複製程式碼

如何使用

  1. git clone git@github.com:RenaultZC/koa-shelf.git
  2. npm install
  3. 複製config/db-template.js到config/db.js,然後配置資料庫相關資訊,建立test表,欄位text為String型別
  4. npm run dev
  5. 到localhost:5000/graphql介面訪問,查詢示例:
query{
  getText{
    text
  }
}
複製程式碼

詳細介紹專案目錄

dao資料夾

該檔案下寫的是資料庫操作,對於mysql資料庫的增刪改查操作,通過呼叫common公共元件中的makePromiseForQuery和makePromiseForExecute進行查詢或增刪改

resolver資料夾

該檔案下寫的是對於GraphQL解析器的書寫,會通過graphql.js 將該檔案下的所有檔案進行整合輸出

schema資料夾

該檔案下寫的是對於GraphQL服務中的變數及型別的書寫,會通過graphql.js 將該檔案下的所有檔案進行整合輸出,與resolver函式一同生成GraphQL查詢介面

routes資料夾

該檔案下會書寫普通介面,通過index.js的暴露出去來引用

db.js檔案

為資料庫的基礎配置,建立資料庫連線池,減少資料庫重連的消耗

graphql.js檔案

整合resolver資料夾和schema資料夾生成GraphQL介面

logger.js檔案

負責後臺開啟後的日常日誌列印,方便後臺崩潰查錯

呼叫方式

import { getLogger } from '../logger'

const logger = getLogger()


logger.error(`Reason: test error, Date:${new Date().toLocaleString()}, error:${e}`)
複製程式碼

config資料夾

資料庫基礎配置檔案db.js

日誌基礎配置檔案log4.json

腳手架實現操作

實現普通GraphQL示例

實現Router介面示例

實現資料庫操作示例

程式碼使用ES6風格

實現日誌檔案記錄功能

加入ESlint程式碼風格檢測功能

程式碼地址

github

相關文章