# Koa

# 介绍

Koa 是一个轻量级且高度可扩展的 Node.js Web 框架,它使用中间件模式来处理请求和响应。Koa 的设计目标是提供一种更简洁、更优雅的方式来构建 Web 应用程序,并且避免了 Express 中的一些常见问题,如回调地狱(callback hell)。

# 特点

以下是 Koa 的一些主要特点:

  1. 中间件机制:Koa 使用中间件模式来处理请求和响应。每个中间件函数都可以访问请求对象(req)、响应对象(res)以及下一个中间件函数,并且可以决定是否将控制权传递给下一个中间件。
  2. 异步编程支持:Koa 原生支持异步编程,通过使用 async/await 关键字来处理异步操作,使代码更加简洁和可读。
  3. 错误处理:Koa 提供了内置的错误处理机制,使得捕获和处理错误变得更加容易。
  4. 性能优化:Koa 的设计目标之一是提供高性能。它避免了不必要的中间件调用,并且通过使用高效的异步操作来提高响应速度。

# 初体验

const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
  ctx.body = 'Hello World!';
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

# 安装

npm install koa2
npm install kolorist
npm install koa-router

# 简单的例子

// config.js
module.exports = {
  httpPort: 5000,
  wsPort: 12345
};
// app.js
const Koa = require("koa2");
const path = require("path");
const { blue, green } = require("kolorist");
const { httpPort } = require("./config");

const app = new Koa();

app.server = app.listen(httpPort, () => {
  console.log(`${blue(`Server is Running`)} at ${green(`http://localhost:${httpPort}`)}`);
});

# 使用路由

const router = new KoaRouter();

router.get("/", async (ctx) => {
  ctx.body = "Home";
});

router.get("/posts", async (ctx) => {
  ctx.body = "Posts";
});

app.use(router.routes(), router.allowedMethods());

# 中间件和洋葱模型

const Koa = require('koa');
const app = new Koa();

// 中间件1
app.use(async (ctx, next) => {
  console.log('Middleware 1: Request received');
  await next();
  console.log('Middleware 1: Response sent');
});

// 中间件2
app.use(async ctx => {
  console.log('Middleware 2: Handling request');
  ctx.body = 'Hello World!';
  console.log('Middleware 2: Response processed');
});

// 启动服务器
app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

当客户端发送一个请求到服务器时,Koa 会按顺序执行这些中间件。第一个中间件会在请求到达第二个中间件之前打印一条日志,并调用 next() 将控制权传递给下一个中间件。

Middleware 1: Request received
Middleware 2: Handling request
Middleware 2: Response processed
Middleware 1: Response sent