Maison > interface Web > js tutoriel > le corps du texte

Une plongée approfondie dans le framework Koa dans Node.js

青灯夜游
Libérer: 2021-06-30 09:16:07
avant
2862 Les gens l'ont consulté

Cet article vous donnera une introduction détaillée au framework Koa dans Node.js. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Une plongée approfondie dans le framework Koa dans Node.js

Dans l'article précédent, nous avons brièvement compris le framework Express et l'avons utilisé pour transformer le jeu pierre-feuille-ciseaux. Jetons un coup d'œil à la différence entre les Koa. framework et le framework Express, puis utilisez le framework Koa pour transformer le jeu pierre-feuille-ciseaux ! [Apprentissage recommandé : "Tutoriel nodejs"]

Koa

Koa est né pour résoudre certains défauts de conception d'Express. Son middleware peut être écrit via la fonction asynchrone. wait next() peut interrompre l'exécution du middleware et attendre que tous les middlewares suivants soient exécutés avant de l'exécuter. Le modèle oignon peut être implémenté via wait next().

Une autre fonctionnalité est le traitement simplifié de la demande et de la réponse, qui sont tous deux montés sur ctx. Le contenu renvoyé peut également être utilisé via une affectation directe, telle que : ctx.response.body = fs .createStream('. vraiment_large.xml').

De plus, Koa a supprimé la fonction de routage. Elle est implémentée via un middleware, qui est une idée minimaliste d'un micro-noyau.

Fonctions de base (Documentation de Koa) :

  • Simplification des requêtes/réponses plus extrême qu'Express, telles que :
    • statut ctx =. 200
    • ctx.body = 'hello node'
  • Middleware implémenté à l'aide de la fonction asynchrone.
  • A la capacité de "mettre en pause l'exécution".
  • Conforme également au modèle oignon dans les situations asynchrones.
  • Rationalisez le noyau et déplacez toutes les fonctions supplémentaires vers le middleware.

Koa transforme le jeu pierre-feuille-ciseaux

De même, le code du module de jeu game.js et de la page index.html n'a pas changé, et le package de dépendances doit être installé : koa et koa-mount (npm i koa koa-mount)

koa-mount peut monter d'autres applications en tant que middleware. Le paramètre path transmis à la fonction mount() est temporairement. supprimé de l'URL jusqu'à la sortie de la pile. Utile pour créer des applications entières ou des middlewares qui fonctionnent correctement quel que soit le chemin utilisé. Il monte le middleware sur un chemin spécifique et le middleware agit indépendamment de ce chemin.

Transformation du code 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);
Copier après la connexion

Express VS Koa

  • Express a un seuil plus bas, et Koa est plus puissant et élégant .
  • Express emballe plus de choses, se développe plus rapidement et Koa est plus personnalisable.

Lequel d'entre eux est « bon » ou « mauvais » ?

  • En fait, il n'y a pas de bonne ou de mauvaise distinction entre les frameworks
  • Différents frameworks ont différents scénarios applicables

Pour plus de connaissances liées à la programmation, veuillez visitez :Vidéo de programmation ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!