范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

koa基于node。js平台的下一代web开发框架入门

  简介
  koa 是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升错误处理的效率。koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。 安装
  Koa需要 node v7.6.0或更高版本来支持ES2015、异步方法
  你可以安装自己支持的node版本。  $ nvm install 7 $ npm i koa $ node my-koa-app.jsBabel异步函数
  在node < 7.6的版本中使用async 函数, 我们推荐使用babel"s require hook.  require("babel-core/register"); // require the rest of the app that needs to be transpiled after the hook const app = require("./app");
  为了解析和转译异步函数,你应该至少有transform-async-to-generator or transform-async-to-module-method这2个插件。例如,在你的.babelrc文件中,应该有如下代码  {   "plugins": ["transform-async-to-generator"] }
  也可以使用env preset并设置"node": "current"来替代.  应用
  Koa 应用是一个包含一系列中间件 generator 函数的对象。 这些中间件函数基于 request 请求以一个类似于栈的结构组成并依次执行。 Koa 类似于其他中间件系统(比如 Ruby"s Rack 、Connect 等), 然而 Koa 的核心设计思路是为中间件层提供高级语法糖封装,以增强其互用性和健壮性,并使得编写中间件变得相当有趣。
  Koa 包含了像 content-negotiation(内容协商)、cache freshness(缓存刷新)、proxy support(代理支持)和 redirection(重定向)等常用任务方法。 与提供庞大的函数支持不同,Koa只包含很小的一部分,因为Koa并不绑定任何中间件。
  任何教程都是从 hello world 开始的,Koa也不例外^_^:  const Koa = require("koa"); const app = new Koa();  app.use(async ctx => {   ctx.body = "Hello World"; });  app.listen(3000);级联
  Koa 的中间件通过一种更加传统(您也许会很熟悉)的方式进行级联,摒弃了以往 node 频繁的回调函数造成的复杂代码逻辑。 然而,使用异步函数,我们可以实现"真正" 的中间件。与之不同,当执行到 yield next 语句时,Koa 暂停了该中间件,继续执行下一个符合请求的中间件("downstrem"),然后控制权再逐级返回给上层中间件("upstream")。
  下面的例子在页面中返回 "Hello World",然而当请求开始时,请求先经过 x-response-time 和 logging 中间件,并记录中间件执行起始时间。 然后将控制权交给 reponse 中间件。当一个中间件调用next()函数时,函数挂起并控件传递给定义的下一个中间件。在没有更多的中间件执行下游之后,堆栈将退出,并且每个中间件被恢复以执行其上游行为。  const Koa = require("koa"); const app = new Koa();  // x-response-time  app.use(async (ctx, next) => {   const start = Date.now();   await next();   const ms = Date.now() - start;   ctx.set("X-Response-Time", `${ms}ms`); });  // logger  app.use(async (ctx, next) => {   const start = Date.now();   await next();   const ms = Date.now() - start;   console.log(`${ctx.method} ${ctx.url} - ${ms}`); });  // response  app.use(async ctx => {   ctx.body = "Hello World"; });  app.listen(3000);配置
  应用配置是 app 实例属性,目前支持的配置项如下:  app.env 默认为   NODE_ENV   or "development"  app.proxy 如果为 true,则解析 "Host" 的 header 域,并支持 X-Forwarded-Host  app.subdomainOffset 默认为2,表示 .subdomains 所忽略的字符偏移量。  app.listen(...)
  Koa 应用并非是一个 1-to-1 表征关系的 HTTP 服务器。 一个或多个Koa应用可以被挂载到一起组成一个包含单一 HTTP 服务器的大型应用群。
  如下为一个绑定3000端口的简单 Koa 应用,其创建并返回了一个 HTTP 服务器,为 Server#listen() 传递指定参数(参数的详细文档请查看nodejs.org)。  const Koa = require("koa"); const app = new Koa(); app.listen(3000);
  The app.listen(...) 实际上是以下代码的语法糖:  const http = require("http"); const Koa = require("koa"); const app = new Koa(); http.createServer(app.callback()).listen(3000);
  这意味着您可以同时支持 HTTPS 和 HTTPS,或者在多个端口监听同一个应用。  const http = require("http"); const https = require("https"); const Koa = require("koa"); const app = new Koa(); http.createServer(app.callback()).listen(3000); https.createServer(app.callback()).listen(3001);app.callback()
  返回一个适合 http.createServer() 方法的回调函数用来处理请求。 您也可以使用这个回调函数将您的app挂载在 Connect/Express 应用上。  app.use(function)
  为应用添加指定的中间件,详情请看 Middleware  app.keys=
  设置签名cookie密钥。
  该密钥会被传递给KeyGrip, 当然,您也可以自己生成 KeyGrip. 例如:  app.keys = ["im a newer secret", "i like turtle"]; app.keys = new KeyGrip(["im a newer secret", "i like turtle"], "sha256");
  在进行cookie签名时,只有设置 signed 为 true 的时候,才会使用密钥进行加密:  ctx.cookies.set("name", "tobi", { signed: true });app.context
  app.context是从中创建ctx的原型。 可以通过编辑app.context向ctx添加其他属性。当需要将ctx添加到整个应用程序中使用的属性或方法时,这将会非常有用。这可能会更加有效(不需要中间件)和/或更简单(更少的require()),而不必担心更多的依赖于ctx,这可以被看作是一种反向模式。
  例如,从ctx中添加对数据库的引用:  app.context.db = db();  app.use(async ctx => {   console.log(ctx.db); });
  注:  ctx上的很多属性是被限制的,在app.context只能通过使用Object.defineProperty()来编辑这些属性(不推荐)。可以在 https://github.com/koajs/koa/issues/652上查阅  已安装的APP沿用父级的ctx和配置。因此,安装的应用程序只是一组中间件。  错误处理
  默认情况下Koa会将所有错误信息输出到 stderr, 除非 app.silent 是 true.当err.status是404或者err.expose时,默认错误处理程序也不会输出错误。要执行自定义错误处理逻辑,如集中式日志记录,您可以添加一个"错误"事件侦听器:  app.on("error", err => {   log.error("server error", err) });
  如果错误发生在 请求/响应 环节,并且其不能够响应客户端时,Contenxt 实例也会被传递到 error 事件监听器的回调函数里。  app.on("error", (err, ctx) => {   log.error("server error", err, ctx) });
  当发生错误但仍能够响应客户端时(比如没有数据写到socket中),Koa会返回一个500错误(Internal Server Error)。 无论哪种情况,Koa都会生成一个应用级别的错误信息,以便实现日志记录等目的。  Context(上下文)
  Koa Context 将 node 的 request 和 response 对象封装在一个单独的对象里面,其为编写 web 应用和 API 提供了很多有用的方法。 这些操作在 HTTP 服务器开发中经常使用,因此其被添加在上下文这一层,而不是更高层框架中,因此将迫使中间件需要重新实现这些常用方法。
  context 在每个 request 请求中被创建,在中间件中作为接收器(receiver)来引用,或者通过 this 标识符来引用: app.use(async ctx => {   ctx; // is the Context   ctx.request; // is a koa Request   ctx.response; // is a koa Response });
  许多 context 的访问器和方法为了便于访问和调用,简单的委托给他们的 ctx.request 和 ctx.response 所对应的等价方法, 比如说 ctx.type 和 ctx.length 代理了 response 对象中对应的方法,ctx.path 和 ctx.method 代理了 request 对象中对应的方法。 中文官网:https://www.koajs.com.cn/
  觉得效果不错的请帮忙加个关注点个赞,经常分享前端实用开发技巧

王俊凯手绘二手车为周杰伦庆生回敬其赠车之情1月18日是周杰伦的生日,王俊凯连续5年卡点送上祝福,写道杰伦哥生日快乐,所有好的祝福86,蛋糕层86。此外,王俊凯今年的手绘庆生大作也有了质的飞跃,不仅花了生日蛋糕,还安排了一辆韩寒8000万的特斯拉还漏雨?二手车残值只剩20万近日,韩寒因为特斯拉又上了热搜,网友调侃韩寒堪称投资界的避雷针,一路越投越亏不说,花了一百多万买的首批特斯拉还漏雨!而如果当时听朋友劝买股票,就是8000万了,已经有了韩寒雨天坐在特斯拉ModelY可加装第三排座椅?选装需3000美元上市当天10小时内,特斯拉ModelY的订单就突破了10万辆,直接把官网订瘫痪了,这种场景在汽车市场可谓是空前了。日前,美国特斯拉官网又曝光了ModelY的全新选装方案。据美国特斯印度塔塔汽车新旗舰SUV下线似曾相识的感觉日前,印度塔塔汽车全新中型SUV车型Safari正式下线。该车作为Harrier的进阶版本,同样基于路虎D8横置平台打造。按照规划,新车将于1月26日在印度市场发售。网友们细看可以菲律宾对进口汽车加征临时关税每辆车征收1459美元据路透社消息,菲律宾贸易部长拉蒙洛佩兹(RamonLopez)本月初表示,菲律宾将对进口乘用车和轻型商用车征收临时关税,以保护疫情期间受到严重影响的本土汽车组装厂商。在新冠疫情流行短视频中草根人类众生相为什么你喜欢看快手出了本新书快手人类学,乍一听感觉极度的宽泛深奥,但不得不说读完这本书,就仿佛走进了最前沿的短视频内容领域,从另一个方面了解草根的人类众生相。这是个人人都在做短视频,人人都可以做工厂因洪水淹没而发生爆炸,背后的原因是什么?河南一个工厂发生爆炸,原因是遇到洪水淹没。水能灭火,一般来说燃烧物或者爆炸物遇水就熄灭,而这家河南工厂生产东西竟然遇水就爆炸,这是什么情况?河南登封工厂发生爆炸01爆炸原因?官方公谢大脚车祸原因是撞到骆驼,撞死国家保护动物要赔钱吗?在路上开车突然撞上骆驼,这几率有多大?乡村爱情故事中谢大脚扮演者于月仙在阿拉善开车,就撞上了两头骆驼,不幸去世,令人唏嘘不已。当然,被撞的两头骆驼也遇难。谢大脚扮演者为什么会在路上天问一号探测器失联,是美国在使坏还是其他什么原因导致?一个不好的消息,我国天问一号火星探测器目前已经失联,地面检测接收站已经无法和天问一号正常通信联系。发生什么情况?相信很多人第一念头是难道是美国在使坏吗?释放干扰弹先不用愤怒,其实这翼联EDUP4G无线路由器用户反馈视频实拍不吹不黑R102风评还是可以翼联EDUPR102这款4G无线路由器上市也有一段时间了,这款路由器怎么样?所谓的4Gwifi在实际应用中能打几分?下面小编整理了20家视频晒单,记录了20个随机用户的使用感受和精翼联EDUP网络安全知多少视频受控监控入侵如何用魔法打败魔法随着视频摄像头和网络监控器的大量使用,极大丰富了人们的社交生活和安防体验。开启上帝视角看家护院千里眼电脑手机的视频摄像头,让在线视频直播变得无比便捷。网络监控器,更让安全更进一步,
WaymoCEO说特斯拉没有自动驾驶,马斯克回怼比你们强近日,Waymo首席执行官约翰克拉夫西克在接受媒体采访时表示,对于Waymo来说,特斯拉根本就不算是竞争对手,比如特斯拉一直以来宣传的完整自动驾驶套件就不是实现全自动驾驶的正确路径从没遇到让我激动的主动降噪TWS,但宝华伟健这款着实令人喜欢半夜11点因为孩子,老婆跟我闹别扭了,反锁了房门。我不是一个冲动的人,没发脾气,没对怼,坐在书房看着凌乱的桌面点了一支烟。我应该思考这种婚姻是个例还是80后普通小市民的惯例,不过心我宣布,这局无线麦胜了如果给你一个选择,你是选有线麦还是无线麦?大家都知道,有线麦由于基本不会受到电波等干扰,所以音质是比较稳定的。但是有线麦不方便的点就在于受线制,不能灵活移动,特别是强迫症人士还要整带上智麦去旅行,花花世界就应当真最近的北京玉渊潭频上热搜,一下子进入全国人民的视线,可谓风光无限。在北京人心中,玉渊潭堪称赏花代名词。特别是春天的玉渊潭樱花,可谓是远近闻名。每年的玉渊潭樱花节也是人山人海,盛况空上头族的快乐源泉在快节奏的生活里我们每天好像都面临不同的压力有些来源于996的工作有些来源于繁琐的现实生活长久处于这样的状态下每个人都需要找到一个释放情绪的出口这些快乐也许在别人看来不值一提但至少看到这款塞宾智麦,手中有线麦不香了对于爱拍旅行vlog的博主来说,拥有一支方便拍摄的设备是多么的重要。如今,无线麦克风已逐渐成为收音市场的主力军。在市场可供选择的条件越来越多的情况下,大多数人已经渐渐不再会被花里胡内卷的无线麦克风,惹了谁?最近有一个高频出现的词,内卷。内卷的本意是指在没有增量资源的情况下,社会对现有的资源进行争夺而加剧的一种社会现象。内卷这一现象已经广泛到什么地步了呢,各行各业都已经开始卷起来了,本宝马CEO随着传统车企的持续入局,特斯拉优势将不复存在近日,宝马CEO奥利弗齐普策接受采访时表示,虽然近两年特斯拉在新能源汽车市场一时风光无量,但是随着越来越多的传统车企持续入局,特斯拉多年的领先优势将会得到终结。之所以奥利弗齐普敢于大众挖掘MEB更多潜力,ID。3有望推出敞篷版在旗下ID。4跨界车进入美国市场的同时,大众也正在考虑挖掘其MEB电动汽车架构的更多潜力,推出一款全新敞篷电动车。这款敞篷车将是去年欧洲上市的ID。3掀背车的敞篷版。MEB电动汽车新能源汽车股价齐跌,蔚来理想小鹏创始人身价蒸发百亿美元近日来股价暴跌的不只特斯拉,新能源汽车板块整体都受到殃及,中国三家造车新势力蔚来理想小鹏股价也随之走低。在美股上市的蔚来股价从最高点下滑了22,理想股价较1月份下跌了27,小鹏股价追身小米Civi,千元机中旗舰realmeQ3s最具质价比骁龙778G手机既骁龙870这颗最均衡体验最好的旗舰神U之后,骁龙778G也称得上是高通的新一代中端神U了。近期,居于这颗神U的手机也是呈井喷式爆发,荣耀50系列,OPPOK9系列,IQOOZ5,