Node.js进阶基础技能—Koa基本使用
一、简介
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基本使用相关推荐
- Node.js Stream - 基础篇
背景 在构建较复杂的系统时,通常将其拆解为功能独立的若干部分.这些部分的接口遵循一定的规范,通过某种方式相连,以共同完成较复杂的任务.譬如,shell通过管道|连接各部分,其输入输出的规范是文本流. ...
- Node.js零基础自学(持续更新中)
1. Node.js时基于Chrome V8 引擎的JavaScript运行环境.官网:Node.jsNode.js® is a JavaScript runtime built on Chrome' ...
- node.js 从基础到操作数据库
node.js 学习 模块化 CommonJS----------双端(1.浏览器端;2.服务器端)------暴露:module.exports =??? exports.xxxx = ??? 浏览 ...
- 【Node.js】 基础语法
目录 Node.js npm package.json 字符编码 REPL Buffer(缓冲区) 函数 回调函数 模块系统 Express 框架 全局对象 console process Strea ...
- node.js自学基础笔记
Node.js 学习目标 能够知道什么是node.js 能够知道node.js可以做什么 能够说出node.js中javascript的组成部分 能够使用path模块处理模块路径 能够使用http模块 ...
- Node.js入门基础
一.命令行窗口 1.打开方式:①cmd ②开始环境中直接找图标 2.通常称呼:终端.shell.小黑屏.cmd窗口 3.常用指令:cd 文件名 (跳转到文件夹下) dir ...
- 看了就会的 Node.js 三大基础模块常用 API
大家好,我是若川.欢迎加我微信 ruochuan12,加群交流学习.今天分享一篇nodejs基础的文章.点击下方卡片关注我,或者查看源码等系列文章. 在日常使用 Node 进行开发的时候,会使用到一些 ...
- Node.js进击基础一(5-11事件模块)
res.on res有on方法. 在nodejs中不存在浏览器里的冒泡捕获等行为,集成了一个模块events,对外暴露一个对象EventEmitter ,EventEmitter作用只有2个事件的发射 ...
- Node.js进击基础一(5-5http知识填坑)
蚂蚁部落:谷歌浏览器network用法详解 http://www.softwhy.com/forum.php?mod=viewthread&tid=19119 按下f12->Networ ...
最新文章
- linux如何查看归档文件,linux基本命令:文本搜索,拷贝文件,移动文件,归档管理,压缩解压缩文件,查看命令位置...
- Linux入门第四集!Jar包的入门、使用、部署!怎么打Jar包?
- UA OPTI570 量子力学 Quasi-classical states与Displacement Operator
- mysql 安全扫描_MySQL 安全和监控 - Can't Wait Any Longer - OSCHINA - 中文开源技术交流社区...
- corspost请求失败_vue项目CORS跨域请求500错误,post请求变options请求
- 什么影响了数据库的性能?
- 前端学习(2641):懂代码之header表头页之控制全屏显示
- mousemove事件java,three.js,补间相机和mousemove事件
- discuz! 7.2 manyou插件暴路径Get Webshell 0day
- 基于JAVA+SpringMVC+Mybatis+MYSQL的疫情防控物业管理系统
- java认证,ocjp认证,jdk1.8,全流程介绍
- 通信原理第三章:正弦波加窄带高斯噪声
- 公司网站无意使用了”方正字体”,被”索赔
- k8s初级班day2
- 为什么要用 Tair 来服务低延时场景 - 从购物车升级说起
- 高德地图初步使用-多点路线连接
- 【那些年,我们一起追的女孩】第十六章
- 12- 定时器介绍和定时器0定时1ms
- html语言中vlink,html中link text指的是什么?
- 基于TerraExplorer Pro的校园三维浏览系统开发
热门文章
- 计算机主机电源接线,七个步骤教你主机电源如何接线
- linux的iptable开启命令,linux防火墙查看状态firewall、iptable
- C++11 使用智能指针封装 pimpl idom
- leetcode刷的一些杂题
- PFC离散元+3DEC离散元技术与应用学习
- c++敢死队问题代码(为大一而生)
- 信息安全 数据赛 铁人三项_2018.5.18信息安全铁人三项赛数据赛题解
- 和平精英追猎模式怎么没了 和平精英追猎下架原因
- 移动web开发rem+js适配布局开发
- c语言mfc怎么插入背景图片,MFC 对话框添加背景图片详细过程(两种方法)