最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Node.js中Koa框架怎么用

這篇文章主要介紹“Node.js中Koa框架怎么用”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強(qiáng),希望這篇“Node.js中Koa框架怎么用”文章能幫助大家解決問題。

公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出道縣免費做網(wǎng)站回饋大家。

Koa

Koa 是為了解決 Express 的一些設(shè)計缺陷而誕生的。它的中間件可以通過 async function 來編寫,await next() 可以中斷中間件的執(zhí)行,等到后面所有中間件執(zhí)行完之后再執(zhí)行,通過 await next() 來實現(xiàn)洋蔥模型。

還有一個特點是對 request 和 response 的簡化處理,這兩者都掛載在 ctx 上使用,返回的內(nèi)容也可以通過直接賦值來使用,如:ctx.response.body = fs.createStream('really_large.xml')。

而且 Koa 把路由功能砍掉了,它是通過中間件來實現(xiàn)的,這是一種微內(nèi)核的極簡思路。

核心功能(Koa 的說明文檔):

  • 比 Express 更極致的 request / response 簡化,如:

    • ctx.status = 200

    • ctx.body = 'hello node'

  • 使用 async function 實現(xiàn)的中間件。

  • 有“暫停執(zhí)行”的能力。

  • 異步的情況下也符合洋蔥模型。

  • 精簡內(nèi)核,所有額外功能都移到中間件里實現(xiàn)。

Koa 改造石頭剪刀布游戲

同樣,game.js 游戲模塊和 index.html 頁面的代碼沒有變動,需要安裝依賴包:koa 和 koa-mountnpm i koa koa-mount

koa-mount 可以將其它應(yīng)用程序作為中間件掛載,傳遞給 mount() 函數(shù)的路徑參數(shù)暫時從 url 里剝離出來,直到堆棧釋放。對于創(chuàng)建不管用于那個路徑且功能正常的整個 app 或 中間件是很有用。它把中間件掛載到一個特定的路徑上,中間件獨立于這個路徑動作。

index.js 代碼改造:

// 加載模塊
const fs = require('fs');
const koa = require('koa');
const mount = require('koa-mount');

const game = require('./game');
let playerWon = 0; // 贏的次數(shù)

const app = new koa();
// 精簡內(nèi)核,所有額外功能都移到中間件里實現(xiàn)。路由使用通過 mount 的中間件實現(xiàn)的
// 通過 mount() 把中間件掛載到一個特定的路徑上,中間件獨立于這個路徑動作。 
// /favicon.ico 路徑的路由
app.use(
  mount('/favicon.ico', function (ctx) {
    // 對 `request` 和 `response` 的處理簡化了,這兩者都掛載在 `ctx` 上使用,返回的內(nèi)容也可以通過直接賦值來使用
    ctx.status = 200;
    return;
  })
)
// mount中不可以跟多個函數(shù)中間件,可以通過 new koa() 來掛載在 koa 上:
const gameKoa = new koa();
app.use(
  mount('/game', gameKoa)
)
// 分離模塊
gameKoa.use(
  async function (ctx, next) {
    if (playerWon >= 3) {
      // response.status(500);
      // response.send('我不會再玩了!');
      // 使用 = 賦值,更加簡化了
      ctx.status = 500;
      ctx.body = '我不會再玩了!';
      return;
    }
    // 通過next執(zhí)行后續(xù)中間件
    await next();
    // 當(dāng)后續(xù)中間件執(zhí)行完之后,會執(zhí)行到這個位置
    if (ctx.playerWon) {
      playerWon++;
    }
  }
)
// 在 koa 里可以使用 async function 和 await next() 來執(zhí)行異步中間件
// 使在異步的情況下也符合洋蔥模型。
gameKoa.use(
  async function (ctx, next) {
    const query = ctx.query;
    const playerAction = query.action;
    if (!playerAction) {
      ctx.status = 400;
      return;
    }
    ctx.playerAction = playerAction;
    await next();
  }
)
// 異步處理,500ms后才返回結(jié)果
gameKoa.use(
  async function (ctx, next) {
    const playerAction = ctx.playerAction;
    const result = game(playerAction);
    // 對于一定需要在請求主流程里完成的操作,一定要使用await進(jìn)行等待
    // 否則koa就會在當(dāng)前事件循環(huán)就把http response返回出去了
    await new Promise(resolve => {
      setTimeout(() => {
        ctx.status = 200;
        if (result == 0) {
          ctx.body = '平局'
        } else if (result == -1) {
          ctx.body = '你輸了'
        } else {
          ctx.body = '你贏了'
          ctx.playerWon = true;
        }
        resolve();
      }, 500)
    })
  }
)
// 打開頁面 index.html
app.use(
  mount('/', function (ctx) {
    ctx.body = fs.readFileSync(__dirname + '/index.html', 'utf-8')
    return;
  })
)
// 監(jiān)聽端口 3000
app.listen(3000);

Express VS Koa

  • Express 門檻更低,Koa 更強(qiáng)大優(yōu)雅。

  • Express 封裝更多東西,開發(fā)更快速,Koa 可定制型更高。

它們孰“優(yōu)”孰“劣”?

  • 其實框架之間并沒有優(yōu)劣之分

  • 不同的框架有不同的適用場景

關(guān)于“Node.js中Koa框架怎么用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。


新聞標(biāo)題:Node.js中Koa框架怎么用
網(wǎng)站鏈接:http://fisionsoft.com.cn/article/giigdo.html