koa2入門

github: https://github.com/noyanse1023/learn-koa2019.git
koa 斷點調(diào)試:
在vscode中在要調(diào)試的文件界面按下F5就啟動了
mac 小技巧
https://www.cnblogs.com/hongrunhui/p/5928833.html
參考:https://segmentfault.com/a/1190000009494041

1.初始化項目

1.mkdir koa //新建koa文件夾
2.cd koa 
3.npm init //初始化
4.npm install koa --save

2.執(zhí)行簡單的demo

1.touch main.js //新建main.js文件
2.在main.js中輸入:
const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
  ctx.body = 'Hello World';
});

app.listen(3000);
3.執(zhí)行node main.js

可以安裝熱nodemon 自動編譯

npm i nodemon --save-dev
在package.json中寫
  "scripts": {
    "start": "nodemon index.js"
  },
執(zhí)行 npm start 就可以自動編譯啦~~

3.搭建路由與Controller

Koa本質(zhì)上是調(diào)用一系列的中間件,來處理對應(yīng)的請求,并決定是否傳遞到下一個中間件去處理。我們來寫一個最簡單的中間件試試。

/*
//main.js代碼
app.use(async ctx => {
  ctx.body = 'Hello World';
});
*/
//改成
app.use(ctx => {
    ctx.body = `Your website url is:${ctx.request.url}`
})
  • 這段代碼中,app.use 的 function 就是最簡單的一個中間件,接受了請求,讀出請求路徑,并返回到客戶端。
  • 所以,接口的本質(zhì),就是判斷不同的請求鏈接,干不同的事情,返回相應(yīng)的結(jié)果。那么我們得需要一個路由中間件koa-router來處理分發(fā)請求
    npm install koa-router --save //安裝路由中間件
    main.js:
const Koa = require('koa')
const Router = require('koa-router')
const app = new Koa()
const router = new Router()

router.get('/', ctx => {
  ctx.body = `這是主頁`
})

router.get('/user', ctx => {
  ctx.body = `這是user頁`
})

router.get('/post', ctx => {
  ctx.body = ctx.request.body
})

router.get('/async', async ctx => {
  const sleep = async (ms) => {
    return new Promise(resolve => {
      setTimeout(() => {
        resolve(true)
      }, ms)
    })
  }
  await sleep(1000)
  ctx.body = `這是異步處理頁`
})

app
  .use(router.routes())
  .use(router.allowedMethods())

app.listen(3000)

處理 post請求,要用中間件bodyparser

npm install koa-bodyparser --save

做一下模塊化處理

-koa
  -node_modules
  -controller
    user.js
  -main.js
  -router.js
  -package.json

main.js:

const Koa = require('koa');
const bodyParser = require('koa-bodyparser')
const app = new Koa();
const router = require('./router')

app.use(bodyParser())

app
    .use(router.routes())
    .use(router.allowedMethods())
    
app.listen(3000);
console.log('server is running at port 3000......')

routers:

const Router = require('koa-router')
const router = new Router()
const user = require('./controller/user')

router.post('/user/login',user.login)
router.get('/user/profile',user.profile)

module.exports = router

controller/user.js:

const sleep = async (ms) => {
    return new Promise(reslove => {
        setTimeout(() => {
            reslove(true)
        })
    },ms)
}
module.exports = {
    login(ctx) {
        ctx.body = {
            username: ctx.request.body.username
        }
    },
    async profile(ctx) {
        await sleep(1000)
        ctx.body = {
            username: '學(xué)長',
            sex: 'man',
            age: '27'
        }

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

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

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