首页前端开发JavaScript深入了解Node.js中的Koa框架

深入了解Node.js中的Koa框架

时间2024-01-29 20:54:02发布访客分类JavaScript浏览395
导读:收集整理的这篇文章主要介绍了深入了解Node.js中的Koa框架,觉得挺不错的,现在分享给大家,也给大家做个参考。本篇文章给大家详细介绍一下Node.js中的Koa框架。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。在前文...
收集整理的这篇文章主要介绍了深入了解Node.js中的Koa框架,觉得挺不错的,现在分享给大家,也给大家做个参考。本篇文章给大家详细介绍一下Node.js中的Koa框架。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

在前文已经简单的了解了 ExPress 框架,并且使用该框架对石头剪刀布游戏进行了改造,那么来看看 Koa 框架和 ExPRess 框架有什么不同,然后用 Koa 框架对石头剪刀布游戏进行改造吧!【推荐学习:《nodejs 教程》】

Koa

Koa 是为了解决 Express 的一些设计缺陷而诞生的。它的中间件可以通过 async function 来编写,await next() 可以中断中间件的执行,等到后面所有中间件执行完之后再执行,通过 awaIT next() 来实现洋葱模型。

还有一个特点是对 request 和 response 的简化处理,这两者都挂载在 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 页面的代码没有变动,需要安装依赖包:koa 和 koa-mount(npm 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.htmlapp.use(  mount('/', function (ctx) {
        ctx.body = fs.reaDFileSync(__dirname + '/index.html', 'utf-8')    return;
  }
    ))// 监听端口 3000app.listen(3000);
    

Express VS Koa

  • Express 门槛更低,Koa 更强大优雅。
  • Express 封装更多东西,开发更快速,Koa 可定制型更高。

它们孰“优”孰“劣”?

  • 其实框架之间并没有优劣之分
  • 不同的框架有不同的适用场景

更多编程相关知识,请访问:编程视频!!

以上就是深入了解Node.js中的Koa框架的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: 浅谈Angular中组件的生命周期下一篇:javascript怎么去除字符串首尾空...猜你在找的JavaScript相关文章 html font标签如何设置字体大小?html font标签属性用法介绍2022-05-16vue3+TypeScript+vue-router的使用方法2022-04-16vue3获取当前路由地址2022-04-16如何利用React实现图片识别App2022-04-16JavaScript展开运算符和剩余运算符的区别详解2022-04-16微信小程序中使用vant框架的具体步骤2022-04-16Vue elementUI表单嵌套表格并对每行进行校验详解2022-04-16如何利用Typescript封装本地存储2022-04-16微信小程序中wxs文件的一些妙用分享2022-04-16JavaScript的Set数据结构详解2022-04-16 其他相关热搜词更多phpjavapython程序员loadpost-format-gallery

若转载请注明出处: 深入了解Node.js中的Koa框架
本文地址: https://pptw.com/jishu/591586.html
javascript怎么去除字符串首尾空格 html怎么让图片上下移动

游客 回复需填写必要信息