Koa2學習(六)使用koa router

2022-11-24 17:06:20 字數 3617 閱讀 1489

引入中介軟體

配置需要的路由

const koa = require('koa')

// 引入koa-router並對其例項化

const router = require('koa-router')()

// 配置get路由

router.get('/get', function (ctx, next) )

// 配置post路由

router.post('/post', function (ctx, next) )

// 註冊路由

請求後我們可以看到結果:

get:

this is a get response!
post:

this is a post response!
這是最基本的路由配置,雖然所有的路由都可以通過這樣的方式配,但是在實際專案中,這樣的**後期會極其難以維護,我們還有更優雅的方式去配置你的路由。

koa-router提供一種router.prefix方法,此方法對於某一個router來說,是一個全域性配置,此router的所有路徑都會自動被新增該字首。

const koa = require('koa')

// 引入koa-router

const router = require('koa-router')

// 這兩行**等同於 const router1 = require('koa-router')()

const router1 = new router()

// 為router1配置路由字首

router1.prefix('/pre')

router1.get('/get', function (ctx, next) )

// router2不配置路由字首

const router2 = new router()

router2.get('/get', function (ctx, next) )

// 註冊路由

我們用瀏覽器訪問,發現get1的路由是/pre/get1,get2的路由是/get2:

localhost:8000/pre/get

this is a get1 response!
localhost:8000/get

this is a get2 response!
使用router.use方法,同樣的能夠為路由分層,並且不會因為忽略了prefix的全域性配置造成一些不必要的失誤,

推薦使用這一種方法為路由分層

const koa = require('koa')

const router = require('koa-router')

// 定義子路由

const router_children = new router()

router_children.get('/get', function (ctx, next) )

// 根路由

const router_root = new router()

// 在根路由中註冊子路由

router_root.use('/root', router_children.routes(), router_children.allowedmethods())

瀏覽器訪問localhost:8000/root/get:

this is a get response from router.use!
類似於vue-router,可以將引數直接以 /path/parma 的形式傳遞引數。

路由的param引數通過ctx.params獲取。

const koa = require('koa')

const koa_router = require('koa-router')

const router = new koa_router()

router.get('/:category/:page/:id', function (ctx, next) )

瀏覽器訪問localhost:8000/story/99/195c6f5b-2f71-4412-9634-bfd05f80c7c4:

當我們的專案越做越大時,可能最終會有成百上千個路由,如果這些路由全部寫在一個檔案下面,對後期的維護將是一個極大的考驗。

因此為了讓我們的**具備高可維護性,可拓展性,我們最好對路由進行切割並分層,我們藉助node.jsfs模組對檔案操作能夠很輕易的實現路由切割。

如果你對fs模組還不太瞭解,請先自行學習此模組。

const koa = require('koa')

const routes = require('./routes')

此段用來引入並註冊routes資料夾下的index.js檔案。

routes/index.js:

const router = require('koa-router')()

const fs = require('fs')

const path = require('path')

const files = fs.readdirsync(__dirname)

files

.filter(file => ~file.search(/^[^\.].*\.js$/))

.foreach(file => `, file_entity.routes(), file_entity.allowedmethods())

} })

module.exports = router

這一段**特別關鍵,用來引入並註冊所有同級目錄下的js檔案(此目錄下的js檔案都是路由檔案),併為他們配上以檔名命名的層級字首。

routes/demo.js:

const router = require('koa-router')()

router.get('/', function (ctx, next) )

router.get('/child', function (ctx, next) )

module.exports = router

這個就是業務的示例檔案,沒什麼特別的。需要新增路由只需要新增此類檔案即可。

通過瀏覽器進行訪問測試

localhost:8000/demo/child:

demo child
localhost:8000/demo:

demo
好了,路由已經被成功分割。

koa2整合mysql

引入mysql包 npm install mysql封裝mysql 建立mysql.js檔案放在utils 工具包 中 使用pool連線池 mysql.js 封裝mysql const mysql require mysql let pools 連線池 let query sql,callback,...

NodeJ Koa2 安裝使用 reeber

koa 是由 express 原班人馬打造的,致力於成為一個更小 更富有表現力 更健壯的 web 框架。使用 koa 編寫 web 應用,通過組合不同的 generator,可以免除重複繁瑣的 函式巢狀,並極大地提升錯誤處理的效率。koa 不在核心方法中繫結任何中介軟體,它僅僅提供了一個輕量優雅的函...

實現自己的Koa2

這部分的 在中demo資料夾中 koa就是基於node自帶的http模組,經過封裝,監聽埠,實現ctx 上下文 管理,中介軟體管理等 例子1 koa監聽3000埠,在頁面輸出值 1 const koa require koa 2 koa 35 ctx.body hello koa2 6 7,func...