【js全?!? koa2-路由koa-router

你不能撒謊,撒謊這個(gè)東西你一開始就停不下來了。

簡潔是智慧的靈魂,冗長是膚淺的藻飾 --《哈姆萊特》

書接上回koa2安裝,在koas的項(xiàng)目中我們開啟了服務(wù),看見了hello,world。在后端的開發(fā)實(shí)際中,這些是不夠的。不急,跟著文章走,不能保證你精通,但絕對夠你入門。

本文收錄于:js全棧工程師

理解:在我膚淺的開發(fā)之中。路由管理,大部分是接收不同的api請求,返回?cái)?shù)據(jù)的。例如一個(gè) api/user的請求,發(fā)送過來賬號(hào),md5加密后的密碼,我們把路由帶進(jìn)來的參數(shù)與數(shù)據(jù)庫比對,給出相應(yīng)的返回。

  • 安裝路由管理插件
npm install koa-router -s

在webstom中的命令行中鍵入命令即可

  • 編輯路由文件

后端的復(fù)雜,大抵就是不知道業(yè)務(wù)會(huì)拓展到什么狀況,功能多么復(fù)雜。因此這里我們使用文件夾來管理。

目錄是 ./router/index

const router = require('koa-router')();   //引入路由函數(shù)

router.get('/',async(ctx,next)=>{
    "use strict";
    ctx.redirect('/index')
})
// 路由中間,頁面路由到/,就是端口號(hào)的時(shí)候,(網(wǎng)址),頁面指引到/index


router.get('/index',async(ctx,next)=>{
    "use strict";
    let html = `
            <h1>請你使用post來獲取json</h1>
            <form action="/api" method="post">
                <input type="text" name="name" >
                <input type="text" name="ages">
                <button type="submit">提交</button>
            </form>
        `
    ctx.body= html
})
//在index的路由的時(shí)候返回一段html,(實(shí)際開發(fā)中,不會(huì)這樣做的) 頁面是一個(gè)表單,模擬我們的前端或者移動(dòng)
// 操作動(dòng)作,(記住,這是動(dòng)作。后面的redux中是很重要的一部分)提交數(shù)據(jù)到/api的路由中

router.post('/api',async(ctx, next) => {
    let apps = ctx.request.body
    console.log(ctx.request.body )
    ctx.body = '111111'
})
//頁面路由到api的時(shí)候,
//  ctx.redirect.body及時(shí)之前提交表單的數(shù)據(jù)
// ctx.body就是頁面的返回體,之前說過了,這里賦值是什么,就返回什么。

module.exports = router
//將頁面暴露出去

還有app .js編輯

const Koa = require('koa')   //koa2中間件依賴
const app = new Koa()       //js的繼承
const Router = require('koa-router')  //路由依賴的中間間

// app.use( async ( ctx ) => {
//     ctx.body = 'hello world'
// })                           //koa2中間件,使用路由的(使用路由后,這里就不會(huì)在編輯代碼了)


app.use(require('./router/index').routes())

app.listen(3000)            //服務(wù)啟動(dòng)端口
console.log('啟動(dòng)成功')      //日志打印

執(zhí)行代碼效果


路由到index頁面

點(diǎn)擊提交后。


路由到api頁面

頁面也能路由到api頁面了。但是,我們要獲取的是表單內(nèi)提交的數(shù)據(jù)。而不是11111。(這里有個(gè)坑,自己爬....)還差一個(gè)插件,這就是kao2我認(rèn)為的一個(gè)好處,按需使用。靈巧,便捷。


  • koa-bodyparser 上下文解析插件
    安裝命令
npm install koa-bodyparser -s

app.js項(xiàng)目入口文件使用。

const Koa = require('koa')   //koa2中間件依賴
const app = new Koa()       //js的繼承
const Router = require('koa-router')  //路由依賴的中間間
const bodyParser = require('koa-bodyparser')  //請求體,返回體解析類似json,text,圖片等
// app.use( async ( ctx ) => {
//     ctx.body = 'hello world'
// })                           //koa2中間件,使用路由的(使用路由后,這里就不會(huì)在編輯代碼了)

app.use(bodyParser())    //使用解析上下文插件

app.use(require('./router/index').routes())

app.listen(3000)            //服務(wù)啟動(dòng)端口
console.log('啟動(dòng)成功')      //日志打印

路由頁面修改

const router = require('koa-router')();   //引入路由函數(shù)

router.get('/',async(ctx,next)=>{
    "use strict";
    ctx.redirect('/index')
})
// 路由中間間,頁面路由到/,就是端口號(hào)的時(shí)候,(網(wǎng)址),頁面指引到/index


router.get('/index',async(ctx,next)=>{
    "use strict";
    let html = `
            <h1>請你使用post來獲取json</h1>
            <form action="/api" method="post">
                <input type="text" name="name" >
                <input type="text" name="ages">
                <button type="submit">提交</button>
            </form>
        `
    ctx.body= html
})
//在index的路由的時(shí)候返回一段html,(實(shí)際開發(fā)中,不會(huì)這樣做的) 頁面是一個(gè)表單,模擬我們的前端或者移動(dòng)
// 操作動(dòng)作,(記住,這是動(dòng)作。后面的redux中是很重要的一部分)提交數(shù)據(jù)到/api的路由中

router.post('/api',async(ctx, next) => {
    let apps = ctx.request.body
    console.log(ctx.request.body )
    ctx.body = apps
})
//頁面路由到api的時(shí)候,
//  ctx.redirect.body及時(shí)之前提交表單的數(shù)據(jù)
// ctx.body就是頁面的返回體,之前說過了,這里賦值是什么,就返回什么。

module.exports = router
//將頁面暴露出去
  • 重啟項(xiàng)目

這里輸入數(shù)據(jù),點(diǎn)擊提交。


index路由頁面

頁面返回你輸入的數(shù)據(jù),即表示路由成功


api路由頁面

還是那句話,或看官網(wǎng)api,對于學(xué)習(xí)koa回更好。

koa官網(wǎng)

總結(jié)
在實(shí)際的開發(fā)中,后端只是返回不同的json,路由只是對應(yīng)的返回?cái)?shù)據(jù)。koa-bodyparser插件的作用來解析請求題的參數(shù),json,圖片,文件什么的。后期會(huì)有詳細(xì)的講解。這里了解一下就好。

是不是覺得后端也不難,那就對了,我們不要急,循序漸進(jìn)的學(xué)習(xí)koa。
后端之中,數(shù)據(jù)庫是很關(guān)鍵的一點(diǎn)。我更新慢,因?yàn)槭露?,(最近寫小程序)。建議去看看數(shù)據(jù)庫,mysql。我也有寫了一篇,3000多字,關(guān)鍵我覺得垃圾。但以我的尿性,肯定是推翻重來的。

關(guān)注我,下章講靜態(tài)資源管理,徹徹底底的前后端分離開發(fā)。

我愛你,就像星星愛著月亮。感謝你們的點(diǎn)贊與關(guān)注

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,045評(píng)論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,564評(píng)論 19 139
  • 框架提出的背景 ES6/7帶來的變革 自ES6確定和ES7中async/await開始普及,Node的發(fā)展變得更加...
    宮若石閱讀 8,707評(píng)論 1 14
  • 《 圈子圈套1 》讀后感 內(nèi)容概要 : 雖然沒有硝煙,卻比戰(zhàn)場更血腥;雖然并未戰(zhàn)死,卻比死亡更痛苦...
    玲兒妹妹閱讀 302評(píng)論 0 0
  • 我好喜歡你 只是 你在哪里 我好想你 你快出來 好不好
    烤魚咯閱讀 183評(píng)論 0 2

友情鏈接更多精彩內(nèi)容