讲解ES6中生成器、yield,以及Node.js下一代Web开发框架--Koa及其中间件的用法。
ECMAScript6,简称ES6,也称作ECMAScript2015,于2015年6月正式定稿。ES6是一次重大升级,是自2009年发布的ES5规范后的首次更新。
function和function* :function*就是上面提到的生成器函数
function* helloWorldGeneratorFunction() {
var hello = yield 'hello';
console.log(hello);
var world = yield 'world';
console.log(world);
return '!';
}
生成器函数也是函数,所以拥有所有函数的特性。比如作用域、闭包,以及遇到第一个return会执行结束等。生成器函数又有些普通函数没有的特性,比如可以使用yield并且yield只能在生成器函数内使用,如果在普通函数内使用yield将会报错。
yield和yield*:Array与String、arguments、Generator、Object。区别在于:yield只返回右右值,而yield*则将函数委托(delegate)到另一个生成器(Generator)或可迭代的对象(如对象串、数组、类数组argument,以及ES6中的Map、Set等)。
co和Koa:Koa是基于Generator和co开发的新一代中间件框架。
ejs和co-ejs:ejs是常用的模板引擎之一,co-ejs是经过改造ejs源码以支持生成器函数的一种尝试。所理解的模板引擎是将定义好的模板与静态数据(如JSON)结合渲染生成HTML。
过滤器:
在使用Express开发时,比较好的方式就是将路由写到一个文件中,如router.js
koa-scheme:
koa-errorhandler:
koe-router-cache和co-cache:当一个网站的访问量越来越大后,增加缓存是提升性能的一个既简单又有效的方式。增加缓存的方式大同小异,无非是将缓存层放到业务逻辑层之前,当请求到到达时,首先经过缓存层,如果命中缓存则直接返回,如果没有命中则传递到业务逻辑层。缓存的更新机制也大同小异,通常有两种方式:一种是设置一个定时器定时更新缓存,一种是当业务逻辑层执行结束后更新缓存。第一种方式简单却浪费资源,第二种方式代码耦合严重也不优雅。而基于Koa的中间件特性,我们可以写出既简单又优雅也不耦合的缓存中间件。
config-lite:不管是小项目还是大项目,将配置与代码分离是一种非常好的做法。我们通常将配置写到一个配置文件里,如config.js/config.json,并放到项目的根目录下。
测试是软件开发过程中必不可少的一环,没有经过测试的程序是不完整的,也是没有保证的。手工测试既烦琐又容易出现人为失误,所以自动化测试变得越来越流行。在项目开发过程中,如何保证添加新功能后,之前的功能也都是可用的呢?如果没有写测试用例,那么需要从头挨个测试功能点;如果之前为每个功能都写了测试,那么只需运行一遍测试程序。
单元测试:自动化测试中的一种,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小的可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。
单元测试又有许多风格,常见的两个风格有:测试驱动开发(TDD)和行为驱动开发(BDD),二者最主要的区别在于:TDD关注所有功能是否被正确实现,每个功能都具备对应的测试用例;BDD强调的是系统最终的实现与用户期望的行为是否一致,验证代码实现是否符合设计目标。
co-mocha和co-supertest:
Nodeclub是一个优秀的开源论坛系统,已经在Node.js中文技术社区。
路由和功能设计:
自定义模型:
theme的设计:
注册:
登录与登出:
主页与版块:
用户页:
发表页与话题页:
测试:
部署:使用pm2,申请MongoLab,部署到Heroku(云服务平台)
https://github.com/nswbmw/N-club