Koa 路由npm
路由(Routing)是由一個 URI(或者叫路徑)和一個特定的 HTTP 方法(GET、POST 等) 組成的,涉及到應用如何響應客戶端對某個網站節點的訪問。app
通俗的講:路由就是根據不一樣的 URL 地址,加載不一樣的頁面實現不一樣的功能。koa
Koa 中的路由和 Express 有所不一樣,在 Express 中直接引入 Express 就能夠配置路由,可是在 Koa 中咱們須要安裝對應的 koa-router 路由模塊來實現async
npm install koa-router
建立app.js文件模塊化
const koa = require('koa') const router = require('koa-router')() // 引入和實例化路由 const app = new koa() // 建立koa實列 // 配置路由 //ctx 上下文(content),包含了request和response信息 router.get('/', async (ctx, next) => { ctx.body="Hello koa"; }) router.get('/news', async (ctx, next) => { ctx.body="新聞 page" }); app.use(router.routes()); //做用:啓動路由 // 做用: 這是官方文檔的推薦用法,咱們能夠 看到 router.allowedMethods()用在了路由匹配 router.routes()以後 // 因此在當全部 路由中間件最後調用.此時根據 ctx.status 設置 response 響應頭 app.use(router.allowedMethods()); // 能夠不配置這個,建議配置上 app.listen(3000,()=>{ console.log('starting at port 3000'); })
Koa 路由 get 傳值網站
在 koa2 中 GET 傳值經過 request 接收,可是接收的方法有兩種:query 和 querystring。ui
query:返回的是格式化好的參數對象,querystring:返回的是請求字符串。url
const koa = require('koa') const router = require('koa-router')() // 引入和實例化路由 const app = new koa() // 建立koa實列 // 配置路由 //ctx 上下文(content),包含了request和response信息 router.get('/', async (ctx, next) => { ctx.body="Hello koa"; }) router.get('/news', async (ctx, next) => { let url =ctx.url; //從 request 中獲取 GET 請求 let request =ctx.request; let req_query = request.query; let req_querystring = request.querystring; //從上下文中直接獲取 let ctx_query = ctx.query; let ctx_querystring = ctx.querystring; ctx.body={ url, req_query, req_querystring, ctx_query, ctx_querystring } }); app.use(router.routes()); //做用:啓動路由 // 做用: 這是官方文檔的推薦用法,咱們能夠 看到 router.allowedMethods()用在了路由匹配 router.routes()以後 // 因此在當全部 路由中間件最後調用.此時根據 ctx.status 設置 response 響應頭 app.use(router.allowedMethods()); // 能夠不配置這個,建議配置上 app.listen(3000,()=>{ console.log('starting at port 3000'); })
Koa 動態路由spa
const koa = require('koa') const router = require('koa-router')() // 引入和實例化路由 const app = new koa() // 建立koa實列 // 配置路由 //ctx 上下文(content),包含了request和response信息 router.get('/', async (ctx, next) => { ctx.body="Hello koa"; }) router.get('/news/:aid', async (ctx, next) => { console.log(ctx.params); // { aid: '123' } //獲取動態路由的數據 ctx.body='這是新聞頁面' }); app.use(router.routes()); //做用:啓動路由 // 做用: 這是官方文檔的推薦用法,咱們能夠 看到 router.allowedMethods()用在了路由匹配 router.routes()以後 // 因此在當全部 路由中間件最後調用.此時根據 ctx.status 設置 response 響應頭 app.use(router.allowedMethods()); // 能夠不配置這個,建議配置上 app.listen(3000,()=>{ console.log('starting at port 3000'); })
能夠多個值3d
const koa = require('koa') const router = require('koa-router')() // 引入和實例化路由 const app = new koa() // 建立koa實列 // 配置路由 //ctx 上下文(content),包含了request和response信息 router.get('/', async (ctx, next) => { ctx.body="Hello koa"; }) router.get('/news/:aid/:cid', async (ctx, next) => { console.log(ctx.params); // { aid: '123' } //獲取動態路由的數據 ctx.body='這是新聞頁面' }); app.use(router.routes()); //做用:啓動路由 // 做用: 這是官方文檔的推薦用法,咱們能夠 看到 router.allowedMethods()用在了路由匹配 router.routes()以後 // 因此在當全部 路由中間件最後調用.此時根據 ctx.status 設置 response 響應頭 app.use(router.allowedMethods()); // 能夠不配置這個,建議配置上 app.listen(3000,()=>{ console.log('starting at port 3000'); })
若是匹配不到對應的動態路由那麼就會not found
路由的模塊化