【koa快速入门】之基础使用

2023-04-22 16:29:47 浏览数 (1)


前言

本文是koa快速入门的第一篇:基础使用,后续还会再写两篇文章,介绍「koa项目最佳实践」和「深究koa原理」。

简介

koa是Express团队打造的新一代web框架,特点是更小,更舒服的开发体验。

更舒服的开发体验

koa对Express的改进之一,是对异步实现方式的改进。

Express是基于ES5的,其异步写法更常见的是基于回调,当然只要node版本支持,也可以用async/await,但是其自身对async/await没有太多支持,如果用了async/await,在错误处理和中间件执行顺序上要开发者自己解决一些问题。

下面代码是Express使用Promise回调时候的一个异常处理示例。

代码语言:javascript复制
const express = require("express");
const app = express();

//create a server object:
app.get("/", (req, res, next) => {
  // do some sync stuff
  queryDb()
    .then((data) => {
      res.write("Hello"   data); //write a response to the client
      res.end();
    }) // handle data
    .catch(next);  //catch(next)处理异步代码块中的任何异常
});

app.use((err, req, res, next) => {
  res.write("reject"   err); //write a response to the client
  res.end();
});

// 所有异步代码必须返回 Promise
const queryDb = function () {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      reject("hi");
    }, 1000);
  });
};

app.listen(8080, function () {
  console.log("server running on 8080");
}); //the server object listens on port 8080

koa 1.0基于ES6编写,使用generator实现异步,代码看起来是下面这样,已经实现了同步写法写异步。

代码语言:javascript复制
var koa = require('koa');
var app = koa();

app.use('/test', function *() {
    yield doReadFile1();
    var data = yield doReadFile2();
    this.body = data;
});

app.listen(3000);

koa 2.0基于ES7编写,ES7引入了async/await关键字,使得同步写异步更加方便,于是koa2的异步代码看起来是这样的。

代码语言:javascript复制
app.use(async (ctx, next) => {
    await next();
    var data = await doReadFile();
    ctx.response.type = 'text/plain';
    ctx.response.body = data;
});

本文的koa都是指koa 2.0版本。

更小更简洁

koa和express另一个区别在于,koa本身不包含任何的中间件,只是一个中间件框架,具体功能都是由各种外部的中间件实现的,而express自带了路由、模板、发送文件、jsonp等等功能,这也使koa框架自身更小更简洁。

使用

示例化应用程序

hello world

0 人点赞