您的位置:首页 > Web前端 > Node.js

Node实战(第2季)5 基于Koa快速开发Web应用

2018-01-26 20:34 337 查看
   讲解ES6中生成器、yield,以及Node.js下一代Web开发框架--Koa及其中间件的用法。

5.1 ES6时代的来临

   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开发的新一代中间件框架。

5.2 模板系统

   ejs和co-ejs:ejs是常用的模板引擎之一,co-ejs是经过改造ejs源码以支持生成器函数的一种尝试。所理解的模板引擎是将定义好的模板与静态数据(如JSON)结合渲染生成HTML。

  过滤器

5.3 路由

   在使用Express开发时,比较好的方式就是将路由写到一个文件中,如router.js

5.4 参数验证与错误处理

   koa-scheme

   koa-errorhandler:   

5.5 缓存和配置

   koe-router-cache和co-cache:当一个网站的访问量越来越大后,增加缓存是提升性能的一个既简单又有效的方式。增加缓存的方式大同小异,无非是将缓存层放到业务逻辑层之前,当请求到到达时,首先经过缓存层,如果命中缓存则直接返回,如果没有命中则传递到业务逻辑层。缓存的更新机制也大同小异,通常有两种方式:一种是设置一个定时器定时更新缓存,一种是当业务逻辑层执行结束后更新缓存。第一种方式简单却浪费资源,第二种方式代码耦合严重也不优雅。而基于Koa的中间件特性,我们可以写出既简单又优雅也不耦合的缓存中间件。

   config-lite:不管是小项目还是大项目,将配置与代码分离是一种非常好的做法。我们通常将配置写到一个配置文件里,如config.js/config.json,并放到项目的根目录下。

5.6 测试

   测试是软件开发过程中必不可少的一环,没有经过测试的程序是不完整的,也是没有保证的。手工测试既烦琐又容易出现人为失误,所以自动化测试变得越来越流行。在项目开发过程中,如何保证添加新功能后,之前的功能也都是可用的呢?如果没有写测试用例,那么需要从头挨个测试功能点;如果之前为每个功能都写了测试,那么只需运行一遍测试程序。

   单元测试:自动化测试中的一种,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小的可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。

   单元测试又有许多风格,常见的两个风格有:测试驱动开发(TDD)和行为驱动开发(BDD),二者最主要的区别在于:TDD关注所有功能是否被正确实现,每个功能都具备对应的测试用例;BDD强调的是系统最终的实现与用户期望的行为是否一致,验证代码实现是否符合设计目标。

   co-mocha和co-supertest

5.7 开发一个论坛系统

   Nodeclub是一个优秀的开源论坛系统,已经在Node.js中文技术社区。

   路由和功能设计

   自定义模型

   theme的设计

   注册

   登录与登出

   主页与版块

   用户页

   发表页与话题页

   测试

   部署:使用pm2,申请MongoLab,部署到Heroku(云服务平台)
https://github.com/nswbmw/N-club
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: