Koa從零搭建到Api實現—項目的搭建

Koa從零搭建到Api實現—項目的搭建

什麼是Koa?

Koa 是一個新的 web 框架,由 Express 幕後的原班人馬打造, 致力於成爲 web 應用和 API 開發領域中的一個更小、更富有表現力、更健壯的基石。 經過利用 async 函數,Koa 幫你丟棄回調函數,並有力地加強錯誤處理。 Koa 並無捆綁任何中間件, 而是提供了一套優雅的方法,幫助您快速而愉快地編寫服務端應用程序。

Koa vs Express

Koa使用promises和async函數來擺脫回調地獄的應用並簡化錯誤處理。它暴露本身ctx.request和ctx.response對象而不是節點req和res對象。另外一方面,Express 使用其餘屬性和方法擴充節點req和res對象,幷包括許多其餘「框架」功能,例如路由和模板,Koa沒有。javascript

所以,若是你但願更接近node.js和傳統的node.js樣式編碼,你可能但願堅持使用Connect / Express或相似的框架。若是你想擺脫回調,請使用Koa。css

總結

Koa是一個比Express更精簡,使用node新特性的中間件框架,相比以前express就是一個龐大的框架java

  • 若是你喜歡diy,很潮,能夠考慮Koa,它有足夠的擴展和中間件,並且本身寫很簡單
  • 若是你想簡單點,找一個框架啥都有,那麼先Express

若是你有興趣瞭解更多不一樣,請訪問Koa vs Expressnode

Koa 項目搭建

注意,本篇教程面向有必定Koa使用經驗的用戶。若是,你還不瞭解Koa,請先看下面的文檔Koa 中文文檔mysql

Koa 文檔過於精簡,雖然將每個API都進行解釋說明,但仍是很難將其組織起來進行應用,對於初學者來講可謂是很不友好。git

筆者第一個Koa項目,將全部接口,邏輯,配置等所有寫在了app.js中,雖然說完美運行,可是可讀性,可維護性極差,因此一個好的目錄結構尤其重要es6

目錄建立

  • config - 配置
  • models - 數據庫模型(ROM)
  • controller - 控制器
  • middlewares - 中間件
  • public - 靜態資源
  • service - 服務
  • router - 路由
  • app.js - 啓動文件

依賴安裝

建立好項目目錄後咱們須要安裝一些依賴,來供咱們使用github

  • babel-core/babel-preset-es2015 - 讓 nodeJs 支持 es6 modules
  • koa - koa2
  • koa-body - request body 解析
  • koa-cache-control - 緩存控制
  • koa-compress - gzip
  • koa-cors - 跨域
  • koa-logger - 日誌
  • koa-onerror - 錯誤處理
  • koa-router - 路由
  • koa-session - session
  • koa-static - 靜態資源服務
  • koa-helmet - 安全
  • md5 - md5 加密
  • mkdirp - 遞歸建立目錄

能夠根據本身的需求進行選擇,可是一些依賴是必須安裝的web

  • koa - koa2
  • koa-body - request body 解析
  • koa-router - 路由

後面的內容會講解每一個插件有什麼用,如何去用。redis

目錄詳解

config

config是咱們的配置文件,好比:

  • 數據庫(mysql,oracle,redis等)
  • OSS
  • ...

實際運用:

  • confirg

    • database.config.js(新建)

database.config.js

export default {
  database: '',
  username: '',
  password: '',
  dialect: '',
  host: '',
  port: 3306
}

具體配置以後會跟你們仔細講解。

models

models文件夾主要是咱們的數據庫模型(ORM),存儲數據庫映射文件,eg:

  • models

    • index.js - 入口文件
    • user.js - 對應數據庫中的user表

index.js

import Sequelize from 'sequelize'
import config from '../config/database.config'
const sequelize = new Sequelize(config)
export const user = sequelize.import(__dirname + '/user')
export default {
 user,
 sequelize
}

如下序號表明代碼行號:

  1. 引入sequelize,它是一個ORM框架,以後會詳細講解它的使用
  2. 引入咱們以前在config中建立的數據庫配置文件呢
  3. 使用sequelize鏈接數據庫
  4. 將本地數據庫映射文件導出供咱們使用

controller

controller爲控制層,主要處理外部請求。調用service層,將service返回的內容整合後返回給調用方

舉例:

const user = require('../service/user')
const findAllUser = async (ctx) => {
  const data = ctx.request.body
  const result = await user.findAllUser(data)
  ctx.body =  send({data: result})
}
module.exports = {
  findAllUser
}

如下序號表明代碼行號:

  1. 獲取請求體
  2. 調用service層
  3. 將service返回的內容返回給調用者(send是自定義的數據格式化方法)

service

service做爲服務層主要作相信的業務邏輯處理,數據處理等,將結果返回給controller層

舉例:

const db = require('../models/')
const findAllUser = async () => {
  const result = await db.user.findAll()
  return result
}
module.exports = {
  findAllUser
}

如下序號表明代碼行號:

  1. 獲取數據庫映射文件,由於要操做數據庫
  2. 從數據庫中查尋所有用戶(db.user.findAll()爲sequelize中提供的查詢方法)
  3. 返回給controller

routers

router管理咱們的路由,也就是接口地址

舉例:

const user = require('../controller/user')
const koa_router = require('koa-router');
const router = koa_router();
router.post('/findAll', user.findAllUser)
module.exports = router

如下序號表明代碼行號:

  1. 引入controller層
  2. 定義接口類型,地址,調用方法(post, '/findAll'',findAllUser)

app.js

app.js是咱們的入口文件及主文件,咱們將router裏配置的路由在此引入

const
  koaBody = require('koa-body')
  Koa = require('koa'),
  Router = require('koa-router')
  router = new Router()

const user = require('./routers/user');
router.use("/user",user.routes());

這樣咱們就能夠訪問:ip:port/user/findAll 接口。

相關文章
相關標籤/搜索