做为一个前端,Node.js算是必备知识之一。同时由于本身须要作一些后台性的工做,或者完成一个小型应用。因此学习了Node的Express框架,用于辅助和加速开发。javascript
不过当初本身对Express的学习和了解,并非很深刻。要求也仅仅是停留在能发送静态文件,构建后台API,与数据库完成简单交互而已。因此当初本身选用Express时,靠的是Express 应用生成器,至关于Express的最佳实践。
在使用了一段时间以后,被Express的“回调地狱”,“自定义程度不高”等问题所困扰,因而决定更换至新的框架。html
在选择框架时,遵循了本身学习新技术的原则:前端
要么找值得学习的,深刻学习并理解。要么找适合当前业务,能快速解决问题的。不要在具体某某某个技术上纠结过久。java
这句话也是本身看余果大大的《Web全栈工程师的自我修养》这本书的体会。git
在上面原则的指导下,很容易的就找到了一款符合本身需求的框架:Koa。
Koa由于应用了ES6的生成器语法,因此很是优雅的解决了Node.js的回调地狱问题。
好比说这样的Ajax代码,看起来就比回调函数的写法优雅不少。es6
function* main() { var result = yield request("http://some.url"); var resp = JSON.parse(result); console.log(resp.value); } function request(url) { makeAjaxCall(url, function(response){ it.next(response); }); }
例子来源: Generator 函数github
虽然yield的写法有点奇怪,但仍是能够接受的。数据库
同时在Koa的github首页中,看到了Koa2。
Koa2应用了ES7的Async/Await
来替代Koa1中的生成器函数与yield。
因此上一段代码的main函数,在Koa2里长这样:express
async function main() { var result = await request("http://some.url"); var resp = JSON.parse(result); console.log(resp.value); }
使用了Async/Await
后,整段代码是变的更加好看的。npm
在一开始学习Koa时,是不太理解Koa的中间件级联这个概念的。
就是下图这玩意。
这个算是Koa的核心概念了,不理解这个,只能安安心心继续用Express。
还好本身平时爱去看各类开发大会的视频,来提高本身的眼界。因此昨晚正好在慕课网看到了《阿里D2前端技术论坛——2015融合》的大会视频,便开心的点开学习。
而第一篇《用 Node.js 构建海量页面渲染服务——by 不四》讲的就有Koa框架,还梳理了Koa的中间件级联这个概念。
在不四前辈介绍完Koa的中间件级联后,我发现本身好像理解了。
配合着本身以前学习的ES6知识,才发现原来是这样。
在这儿我贴一段代码和本身的理解,有兴趣的同窗能够看一看。
var koa = require('koa'); var app = koa(); // x-response-time app.use(function *(next){ // 首先启动第一个中间件,记录下时间 var start = new Date; // 进入中间件,并等待返回。 yield next; // 返回后,表明操做已完成,记录结束时间并输出。 var ms = new Date - start; this.set('X-Response-Time', ms + 'ms'); }); // response app.use(function *(){ // 最后一个中间件,将body写成'Hello World' this.body = 'Hello World'; }); app.listen(3000);
整个的流程,会是这样的:
.middleware1 { // (1) do some stuff .middleware2 { // (2) do some other stuff .middleware3 { // (3) NO next yield ! // this.body = 'hello world' } // (4) do some other stuff later } // (5) do some stuff lastest and return }
至此,学习Koa的最后一个难关,也被攻克了。
由于对Express的学习和使用,知道了本身对于后台框架的真实需求。
因此这回决定不用Koa generator以内的工具,而是本身从零开始,组装一个适合本身的Koa框架。
基于Koa2,使用Async/Await,符合本身需求……
想一想就是很美好的事情呀。
首先要作的,天然就是梳理本身的需求。看看到底须要什么东西。
因而翻出本身前两个月在使用的Express框架,肯定了如下要点。
路由,建立Rest Api
发送静态HTML文件
设置静态文件目录
发送和读取JSON数据
渲染模板
使用ES6语法完成工做
具体的实现部分,这儿就再也不赘述了。就是去github和npm上,寻找一个一个的包并组装在一块儿了而已。
整个项目的亮点就在于:彻底符合我的需求,而且使用ES6来完成工做。对我我的而言,用ES6不只看起来爽,也能提高个人工做效率。
整个项目已开源于Github,往后本身取用也很是方便。有兴趣的同窗,也能够尝试一下。
项目地址:koa2-easy
这周由于胃肠炎,好像也没作啥事情……最大的事儿也只是组装了个Koa框架。
由于养病的缘由,只能天天看看开发者大会的视频。由于肚子时不时的抽一下,真的很影响工做啊……
今天感受好了一点,但愿病情早日康复~就酱~