zoukankan      html  css  js  c++  java
  • node中从express到koa再到koa2的发展历程

    koa是Express的下一代基于Node.js的web框架,目前有1.x和2.0两个版本。

    历史

    1. Express

    Express是第一代最流行的web框架,它对Node.js的http进行了封装,用起来如下:

    'use strict'
    
    var express=require('express');
    var app=express();
    
    app.get('/',function(req,res){
        res.send('Hello world!');
    });
    
    app.listen(3000,function(){
        console.log('Example app listening on port 3000!');
    });
    
    //可以在http://127.0.0.1:3000访问

    虽然Express的API很简单,但是它是基于ES5的语法,要实现异步代码,只有一个方法:回调。如果异步嵌套层次过多,代码写起来就非常难看:

    虽然可以用async这样的库来组织异步代码,但是用回调写异步实在是太痛苦了!

    2. koa 1.0

    随着新版Node.js开始支持ES6,Express的团队又基于ES6的generator重新编写了下一代web框架koa。和Express相比,koa 1.0使用generator实现异步,代码看起来像同步的:

    var koa=require('koa');
    var app=koa();
    
    app.use('/test',function*(){
        yield doReadFile1();
        var data=yield doReadFile2();
        this.body = data;
    });
    
    app.listen(3000);
    //可以在http://127.0.0.1:3000访问

    用generator实现异步比回调简单了不少,但是generator的本意并不是异步。Promise才是为异步设计的,但是Promise的写法……想想就复杂。为了简化异步代码,ES7(目前是草案,还没有发布)引入了新的关键字asyncawait,可以轻松地把一个function变为异步模式:

    async function () {
        var data = await fs.read('/file1');
    }

    这是JavaScript未来标准的异步代码,非常简洁,并且易于使用。

    3. koa2

    koa团队并没有止步于koa 1.0,他们非常超前地基于ES7开发了koa2,和koa 1相比,koa2完全使用Promise并配合async来实现异步。

    koa2的代码看上去像这样:

    app.use(async (ctx, next) => {
        await next();
        var data = await doReadFile();
        ctx.response.type = 'text/plain';
        ctx.response.body = data;
    });

    出于兼容性考虑,目前koa2仍支持generator的写法,但下一个版本将会去掉。

    koa2是以后的趋势

  • 相关阅读:
    JS LeetCode 1423. 可获得的最大点数简单题解
    SpringBoot 学集 (第六章) Docker
    Linux 学记 (第三章)
    Linux 学记 (第二章)
    Linux 学记 (第一章)
    SpringBoot 学集 (第五章) Web开发续
    SpringBoot 学集 (第四章)Web开发
    SpringBoot 学集 (第三章) 日志框架
    SpringBoot 学集 (第二章) 配置文件
    SpringBoot 学集 (第一章)
  • 原文地址:https://www.cnblogs.com/fqh123/p/11032446.html
Copyright © 2011-2022 走看看