一、简介

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.js

三、Babel异步函数

在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 应用程序是一个包含一组中间件函数的对象,它是按照类似堆栈的方式组织和执行的。Koa 类似于你可能遇到过的许多其他中间件系统,例如 Ruby 的 Rack ,Connect 等,然而,一个关键的设计点是在其低级中间件层中提供高级“语法糖”。这提高了互操作性,稳健性,并使书写中间件更加愉快。

这包括诸如内容协商,缓存清理,代理支持和重定向等常见任务的方法。尽管提供了相当多的有用的方法 Koa 仍保持了一个很小的体积,因为没有捆绑中间件。

必修的 hello world 应用:

五、级联

Koa 中间件以更传统的方式级联,您可能习惯使用类似的工具 - 之前难以让用户友好地使用 node 的回调。然而,使用 async 功能,我们可以实现 “真实” 的中间件。对比 Connect 的实现,通过一系列功能直接传递控制,直到一个返回,Koa 调用“下游”,然后控制流回“上游”。

下面以 “Hello World” 的响应作为示例,首先请求流通过 x-response-time 和 logging 中间件来请求何时开始,然后继续移交控制给 response 中间件。当一个中间件调用 next() 则该函数暂停并将控制传递给定义的下一个中间件。当在下游没有更多的中间件执行后,堆栈将展开并且每个中间件恢复执行其上游行为。

六、设置

应用程序设置是 app 实例上的属性,目前支持如下:

·app.env 默认是 NODE_ENV 或 "development"

·app.proxy 当真正的代理头字段将被信任时

·app.subdomainOffset 对于要忽略的 .subdomains 偏移[2]

·app.context

app.context 是从其创建 ctx 的原型。您可以通过编辑 app.context 为 ctx 添加其他属性。这对于将 ctx 添加到整个应用程序中使用的属性或方法非常有用,这可能会更加有效(不需要中间件)和/或 更简单(更少的 require()),而更多地依赖于ctx,这可以被认为是一种反模式。

例如,要从 ctx 添加对数据库的引用:

注意:ctx 上的许多属性都是使用 getter ,setter 和 Object.defineProperty() 定义的。你只能通过在 app.context 上使用 Object.defineProperty() 来编辑这些属性(不推荐)。查阅https://github.com/koajs/koa/issues/652.

安装的应用程序目前使用其父级的 ctx 和设置。因此,安装的应用程序只是一组中间件。

七、最后

Koa是基于Node.js的下一代web框架,由Express团队打造,特点:优雅、简洁、灵活、体积小。几乎所有功能都需要通过中间件实现。

Node.js进阶基础技能—Koa基本使用相关推荐

  1. Node.js Stream - 基础篇

    背景 在构建较复杂的系统时,通常将其拆解为功能独立的若干部分.这些部分的接口遵循一定的规范,通过某种方式相连,以共同完成较复杂的任务.譬如,shell通过管道|连接各部分,其输入输出的规范是文本流. ...

  2. Node.js零基础自学(持续更新中)

    1. Node.js时基于Chrome V8 引擎的JavaScript运行环境.官网:Node.jsNode.js® is a JavaScript runtime built on Chrome' ...

  3. node.js 从基础到操作数据库

    node.js 学习 模块化 CommonJS----------双端(1.浏览器端;2.服务器端)------暴露:module.exports =??? exports.xxxx = ??? 浏览 ...

  4. 【Node.js】 基础语法

    目录 Node.js npm package.json 字符编码 REPL Buffer(缓冲区) 函数 回调函数 模块系统 Express 框架 全局对象 console process Strea ...

  5. node.js自学基础笔记

    Node.js 学习目标 能够知道什么是node.js 能够知道node.js可以做什么 能够说出node.js中javascript的组成部分 能够使用path模块处理模块路径 能够使用http模块 ...

  6. Node.js入门基础

    一.命令行窗口 1.打开方式:①cmd ②开始环境中直接找图标 2.通常称呼:终端.shell.小黑屏.cmd窗口 3.常用指令:cd 文件名 (跳转到文件夹下) dir                ...

  7. 看了就会的 Node.js 三大基础模块常用 API

    大家好,我是若川.欢迎加我微信 ruochuan12,加群交流学习.今天分享一篇nodejs基础的文章.点击下方卡片关注我,或者查看源码等系列文章. 在日常使用 Node 进行开发的时候,会使用到一些 ...

  8. Node.js进击基础一(5-11事件模块)

    res.on res有on方法. 在nodejs中不存在浏览器里的冒泡捕获等行为,集成了一个模块events,对外暴露一个对象EventEmitter ,EventEmitter作用只有2个事件的发射 ...

  9. Node.js进击基础一(5-5http知识填坑)

    蚂蚁部落:谷歌浏览器network用法详解 http://www.softwhy.com/forum.php?mod=viewthread&tid=19119 按下f12->Networ ...

最新文章

  1. linux如何查看归档文件,linux基本命令:文本搜索,拷贝文件,移动文件,归档管理,压缩解压缩文件,查看命令位置...
  2. Linux入门第四集!Jar包的入门、使用、部署!怎么打Jar包?
  3. UA OPTI570 量子力学 Quasi-classical states与Displacement Operator
  4. mysql 安全扫描_MySQL 安全和监控 - Can't Wait Any Longer - OSCHINA - 中文开源技术交流社区...
  5. corspost请求失败_vue项目CORS跨域请求500错误,post请求变options请求
  6. 什么影响了数据库的性能?
  7. 前端学习(2641):懂代码之header表头页之控制全屏显示
  8. mousemove事件java,three.js,补间相机和mousemove事件
  9. discuz! 7.2 manyou插件暴路径Get Webshell 0day
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的疫情防控物业管理系统
  11. java认证,ocjp认证,jdk1.8,全流程介绍
  12. 通信原理第三章:正弦波加窄带高斯噪声
  13. 公司网站无意使用了”方正字体”,被”索赔
  14. k8s初级班day2
  15. 为什么要用 Tair 来服务低延时场景 - 从购物车升级说起
  16. 高德地图初步使用-多点路线连接
  17. 【那些年,我们一起追的女孩】第十六章
  18. 12- 定时器介绍和定时器0定时1ms
  19. html语言中vlink,html中link text指的是什么?
  20. 基于TerraExplorer Pro的校园三维浏览系统开发

热门文章

  1. 计算机主机电源接线,七个步骤教你主机电源如何接线
  2. linux的iptable开启命令,linux防火墙查看状态firewall、iptable
  3. C++11 使用智能指针封装 pimpl idom
  4. leetcode刷的一些杂题
  5. PFC离散元+3DEC离散元技术与应用学习
  6. c++敢死队问题代码(为大一而生)
  7. 信息安全 数据赛 铁人三项_2018.5.18信息安全铁人三项赛数据赛题解
  8. 和平精英追猎模式怎么没了 和平精英追猎下架原因
  9. 移动web开发rem+js适配布局开发
  10. c语言mfc怎么插入背景图片,MFC 对话框添加背景图片详细过程(两种方法)