koa入門

1、koa-generator使用

  1. 安裝:npm install -g koa-generator
  2. 建立項目:koa2 -e project(-e是指ejs模版)
  3. 進入項目安裝依賴包:npm install
  4. 啓動項目npm start(熱更新選擇npm run dev)
  5. 當項目出現:node bin/www 表示項目已經跑起來

# npm install -g koa-generator
# koa2 -e project
# cd project
# npm install
# npm run dev

2、koa異步操做async

  1. async異步的概念和使用場景?

    async用來定義一個返回 AsyncFunction 對象的異步函數,它會經過一個隱式的 Promise 返回其結果。若是你在代碼中使用了異步函數,它以同步的寫法去執行異步的代碼;使用場景:連續的異步請求下,下一步的異步請求依賴於前一步的異步請求結果。node

  2. 回顧promise與async區別?

    promise是經過回調函數不斷調用.then方法去執行下面的方法連續操做;async以同步的寫法去執行異步的代碼,拿到執行結果,async實際上是promise的語法糖。寫法上更優雅。可讀性更高。解藕性高npm

  3. 何時用await?promise

    當外層函數有async的時候,內部沒有await是能夠的;函數內部有await,外層必定要有async。不然會報錯。await後面必定是Promise對象,若是不是會自動包裝成Promise對象,其實async是Promise的語法糖,內部幫咱們作了處理 瀏覽器

    index.jscookie

    # 在node中全局對象不是window,是global
    # ctx:ctx對象掛載了全部信息,能夠拿到上下文中的 request 與 response 對象;
    router.get('/testAsync', async (ctx, next) => {
      global.console.log('start', new Date().getTime());
      let a = await new Promise((resolve, reject) => {
        setTimeout(() => {
          global.console.log('async a', new Date().getTime());
          resolve('a')
        }, 1000)
      })
      let b = await 'b';
      ctx.body = {
        a,
        b
      }
    })

3、koa中間件

  • 建立方式和基礎用法

  1. 建立中間件文件夾middleware
  2. 在middleware中建立咱們本身的中間件,好比:koa-pv.js
  3. 編寫方法。最後導出,導出必須是一個函數,函數中一樣須要返回一個異步函數,函數參數next()必須調用(由於當前中間件運行完畢後調用下一個,next至關於觸發器)
  4. 在app.js中引入本身的中間件
  5. app.use(「本身中間件引入的名字」)去引用app

    koa-pv.js框架

    # mkdir middleware
    # touch middleware/koa-pv.js
    
    function pv(ctx) {
        global.console.log(`pv:${ctx.path}`)
    }
    module.exports = function () {
        return async function (ctx, next) {
            global.console.log(`pv start`)
            pv(ctx)
            await next() //中間件運行完畢後調用下一個,next至關於觸發器
            global.console.log(`pv end`)
        }
    }

    app.jsdom

    const Koa = require('koa')
    const app = new Koa()
    const pv = require('./middleware/koa-pc')
    app.use(pv());

    刷新頁面在咱們控制檯裏能夠看到咱們的剛纔中間間中打印出來的內容koa

  • koa中間件原理

  1. 首先看上面的圖。koa也就是一個服務端框架,接受全部瀏覽器發出的請求
  2. 通過內部運轉(ctx)
  3. 返回並給瀏覽器響應
  4. 這個洋蔥形狀的延伸出來的其實都是中間件。好比註冊的manager,重定向等這些中間件在咱們項目初始化的都會去執行。
  5. 再說下中間件引入和執行順序問題,其實咱們看洋蔥圈是整個的,進來會執行,出去也會執行。不管無論在哪裏,都會被執行。因此他的引用順序和代碼順序能夠不一致
  6. 代碼最終都會在執行機制還會回去。一進一出。

4、koa路由

  1. 進入routes目錄下,建立咱們相關的路由文件
  2. 引入koa-router,編寫接口,最後導出router
  3. 在app.js中引入,並使用異步

    login.js

    # touch routes/login.js
     const router = require('koa-router')()
     router.prefix('/login') //前綴對應頁面。模塊化去區分
     router.get('/',async (ctx,next)=>{
        await ctx.render('login', {
            title: 'Hello login!'
        })
     }
     router.get('/bar',async (ctx,next)=>{
        ctx.body={
            code: 0,
            data:{
                count:1
            }
        }
     })
     module.exports = router

    app.js

    # 在app.js中引入login.js
    const Koa = require('koa')
    const app = new Koa()
    const login = require('./routes/login')
    app.use(login.routes(), login.allowedMethods())

5、koa中cookies的使用?

  1. 讀 ctx.cookies.get('pvid')
  2. 寫 ctx.cookies.set('pvid', Math.random())
  3. 須要用到時看API便可。

    const router = require('koa-router')()
    
    router.prefix('/login')
    
    router.get('/', async (ctx, next) => {
        ctx.cookies.set('pvid', Math.random())
        await ctx.render('login', {
            title: 'Hello login!'
        })
    })
    
    router.get('/bar', async (ctx, next) => {
    
        ctx.body = ctx.cookies.get('pvid');
    })
    module.exports = router
相關文章
相關標籤/搜索