Node - koa 和 express 区别

koa 和 express 区别

koa 和 express
Expresskoa都是服务端的开发框架,服务端开发的重点是对HTTP RequestHTTP Response两个对象的封装和处理,应用的生命周期维护以及视图的处理等。

Express: 主要基于Connect 中间件框架,框架自身封装了大量便利的功能,比如,路由,视图处理等等

Koa: 主要基于Connect中间件框架,框架自身并没有集成大多数功能,大部分功能需要用户自行require中间件去解决,但是由于其基于ES6 generator特性的中间件机制,解决了长期诟病的callback hell和麻烦的错误处理的问题

两者不同点:

1.启动方式不同

2.koa采用了new Koa()的方式,而express采用传统的函数形式

3.koa没有回调函数,使用async/await,而express有回调函数。

web 框架 应用
express 回调函数
koa Generator函数 +yield语句+Promise
koa2 async/await+Promise

Koa写法

首先,我们创建一个目录hello-koa并作为工程目录用VS Code打开。然后,我们创建app.js,输入以下代码:

// 导入koa,和koa 1.x不同,在koa2中,我们导入的是一个class,因此用大写的Koa表示:
const Koa = require('koa');

// 创建一个Koa对象表示web app本身:
const app = new Koa();

// 对于任何请求,app将调用该异步函数处理请求:
app.use(async (ctx, next) => {
    await next();
    ctx.response.type = 'text/html';
    ctx.response.body = '<h1>Hello, koa2!</h1>';
});

// 在端口3000监听:
app.listen(3000);
console.log('app started at port 3000...');

对于每一个http请求,koa将调用我们传入的异步函数来处理:

async (ctx, next) => {
    await next();
    // 设置response的Content-Type:
    ctx.response.type = 'text/html';
    // 设置response的内容:
    ctx.response.body = '<h1>Hello, koa2!</h1>';
}

其中,参数ctx是由koa传入的封装了request和response的变量,我们可以通过它访问request和response,next是koa传入的将要处理的下一个异步函数。
由async标记的函数称为异步函数,在异步函数中,可以用await调用另一个异步函数

Express写法

首先,我们创建一个目录hello-express并作为工程目录用VS Code打开。然后,我们创建express_demo.js

//express_demo.js 文件
var express = require('express');
var app = express();
 
app.get('/', function (req, res) {
   res.send('Hello World');
})
 
var server = app.listen(8081, function () {
 
  var host = server.address().address
  var port = server.address().port
 
  console.log("应用实例,访问地址为 http://%s:%s", host, port)
 
})

在控制台输入以下命令运行:

node express_demo.js 

其实,Express 和 Koa ,最明显的差别就是 Handler 的处理方法,一个是普通的回调函数,一个是利用生成器函数(Generator Function)来作为响应器。往里头儿说就是 Express 是在同一线程上完成当前进程的所有 HTTP 请求,而 Koa 利用 co 作为底层运行框架,利用 Generator 的特性,实现“协程响应”

猜你喜欢

转载自blog.csdn.net/qq_44352182/article/details/89740894