koa-router 新解法

基於koa的路由中間件

  • api兼容 koa-router, 接口詳情見 API Reference
  • 支持基於註釋的路由編寫,便於實現 restful 風格
  • 內置koa-body,便於解析參數

安裝

正如你所見,dolphin-router已經發布在npmjs中心倉庫,你能夠直接進行安裝使用node

# 做爲依賴安裝
npm i dolphin-router --save

基於koa的web開發示例

新建koa項目

如下操做,須要提早安裝node.js運行環境git

# 若是windows,請使用相關shell執行以下命令,如 git bash

# 建立目錄
mkdir koatest

# 初始化node項目,此處爲了方便,全部選項直接默認
npm init -y

# 安裝koa框架和dolphin-router
npm i koa dolphin-router --save

# ok 項目建立完畢

dolphin-router 兼容 koa-router 的示例

在上述文件夾 koatest 的根目錄建立 index.js 文件github

touch index.js

在文件中添加以下代碼web

// 引入koa
const Koa = require('koa')

// 當你在引入完成dprouter以後,koa-router會被實例化
// dprouter不須要再次 new 建立
const dprouter = require('dolphin-router')

// 建立koa應用
const app = new Koa()

// 添加路由規則
dprouter.get('/', async (ctx) => {
    ctx.body = 'Hello Dolphin Router!'
})

// 註冊路由中間件
app.use(dprouter.routes()).use(dprouter.allowedMethods())

// 啓動監聽
app.listen(3000, () => {
    console.log('請訪問 http://localhost:3000/ 進行測試...')
})

基於註釋的路由寫法(推薦用法)

以上示例僅僅將 dolphin-router 看成 koa-router 使用,本中間件倡導的是註釋的寫法,跟着如下步驟,寫一個小demoshell

  1. 在根目錄下建立出路徑 src/controllers, 須要注意的是,這是 dolphin-router 的默認路徑,應用啓動時,路由中間件直接會去解析此路徑(配置方式見後文)
  2. 建立文件 DemoController.js,此處文件名沒有要求,擴展名是.js便可。須要注意的是,一個Controller裏面只寫一個 class,示例代碼以下
// 根目錄下的index.js代碼以下

const Koa = require('koa')
const dprouter = require('dolphin-router')

const app = new Koa()

// 註冊路由中間件便可
app.use(dprouter.routes())
app.use(dprouter.allowedMethods())

app.listen(3000, () => {
    console.log('啓動成功')
})

DemoController.js的代碼以下所示npm

module.exports = class DemoController {
    /**
     * @api {get} / hello
     */
    async hello(ctx) {
        // 簡單返回
        ctx.body = 'Hello Dolphin Router!'
    }

    /**
     * @api {post} / haha
     */
    async haha(ctx) {
        ctx.body = ctx.request.body
    }
}

put方法和delete方法和上述相似。json

  1. 若是你須要指定項目controller的路徑,則能夠在package.json中添加幾行配置。具體以下:
"dolphin": {
    "controller": {
      "path": "./src/controller"
    }
}

dolphin,controller以及path三個名稱不可變。path的值是相對於項目根目錄,controller文件夾所在的相對路徑windows

ok,那咱們如何獲取query參數、body參數以及文件呢?So easy!api

HTTP請求參數解析

  • 針對query
    ctx.query 或者 ctx.request.query 便可獲取到
  • 針對body
    若是咱們使用koa-router,咱們可能須要引入解析body的中間件,好比 koa-body。這是一個優秀的body parser,所以dolphin對此進行了集成,並給了默認的配置。使用時以下:bash

    // 在原有的代碼基礎上增長下面一句
    app.use(dprouter.koaBody())
    // 結束
    app.use(dprouter.routes())
    ...

    如今你已經能夠解析body了,你能夠從ctx.request.body獲取到你接收到的數據,能夠從ctx.request.files獲取到你上傳的文件。

  • 針對文件,默認會保存到程序的運行目錄下。若是有針對koa-body其餘的配置,你能夠參考 koa-body 的說明,在app.use(dprouter.koaBody({yourself option...}))進行配置。

如下是一個示例

module.exports = class DemoController {
    /**
     * 實例的demo無改動
     * @api {post} / haha
     */
    async haha(ctx) {
        // 獲取文件地址
        console.log(ctx.request.query)
        console.log(ctx.request.body)
        console.log(ctx.request.files)
        ctx.body = ctx.request.body
    }
}

至此,你已經完成了Dolphin-Router的初體驗,其餘功能正在開發中,後續打算將提供參數校驗,api文檔自動生成等特性。

相關文章
相關標籤/搜索