91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node.js中的Koa框架有什么作用

發布時間:2021-06-16 10:38:05 來源:億速云 閱讀:501 作者:chen 欄目:web開發

這篇文章主要講解了“Node.js中的Koa框架有什么作用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Node.js中的Koa框架有什么作用”吧!

在前文已經簡單的了解了 Express 框架,并且使用該框架對石頭剪刀布游戲進行了改造,那么來看看 Koa 框架和 Express 框架有什么不同,然后用 Koa 框架對石頭剪刀布游戲進行改造吧!

Koa

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

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

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

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

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

    • ctx.status = 200

    • ctx.body = 'hello node'

  • 使用 async function 實現的中間件。

  • 有“暫停執行”的能力。

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

  • 精簡內核,所有額外功能都移到中間件里實現

Koa 改造石頭剪刀布游戲

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

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

index.js 代碼改造:

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

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

const app = new koa();
// 精簡內核,所有額外功能都移到中間件里實現。路由使用通過 mount 的中間件實現的
// 通過 mount() 把中間件掛載到一個特定的路徑上,中間件獨立于這個路徑動作。 
// /favicon.ico 路徑的路由
app.use(
  mount('/favicon.ico', function (ctx) {
    // 對 `request` 和 `response` 的處理簡化了,這兩者都掛載在 `ctx` 上使用,返回的內容也可以通過直接賦值來使用
    ctx.status = 200;
    return;
  })
)
// mount中不可以跟多個函數中間件,可以通過 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執行后續中間件
    await next();
    // 當后續中間件執行完之后,會執行到這個位置
    if (ctx.playerWon) {
      playerWon++;
    }
  }
)
// 在 koa 里可以使用 async function 和 await next() 來執行異步中間件
// 使在異步的情況下也符合洋蔥模型。
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后才返回結果
gameKoa.use(
  async function (ctx, next) {
    const playerAction = ctx.playerAction;
    const result = game(playerAction);
    // 對于一定需要在請求主流程里完成的操作,一定要使用await進行等待
    // 否則koa就會在當前事件循環就把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;
  })
)
// 監聽端口 3000
app.listen(3000);

Express VS Koa

  • Express 門檻更低,Koa 更強大優雅。

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

它們孰“優”孰“劣”?

  • 其實框架之間并沒有優劣之分

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

感謝各位的閱讀,以上就是“Node.js中的Koa框架有什么作用”的內容了,經過本文的學習后,相信大家對Node.js中的Koa框架有什么作用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

迭部县| 舞阳县| 汨罗市| 东城区| 怀化市| 靖宇县| 南皮县| 博乐市| 齐河县| 锡林浩特市| 宜黄县| 桐城市| 同德县| 张家港市| 临武县| 苏尼特左旗| 蒙阴县| 马边| 永福县| 日照市| 文昌市| 恭城| 长泰县| 西安市| 鹤庆县| 尖扎县| 海原县| 赞皇县| 宿迁市| 晋城| 贺兰县| 云安县| 杭州市| 时尚| 潮安县| 扶沟县| 望都县| 黄平县| 梅河口市| 视频| 拜泉县|