node——koa

郗俊能
2023-12-01

koa


提示:以下是本篇文章正文内容,下面案例可供参考

一、koa基本使用

  1. 安装koa第三方包

    nvm install koa -S
    npm i koa -S

  2. 使用koa的文件中引入koa

	const Koa = require('koa')
  1. new 一个koa对象
	const app = new Koa()

4.通过koa创建一个简单的服务

	const Koa = require('koa')
	const app = Koa()
	app.use(async (ctx,next)=>{
		ctx.body = 'hello koa'
	})
	app.listen(3000,()=>{
		consloe.log(' app is running ')
	}

二、核心

KoaNodeJS 原生 IncomingMessageServerResponse 对象和解析响应通用流程进行了包装,并提供了几个核心类(对象)用于其它各种用户业务调用

  1. Application 对象
  2. Context 对象
  3. Request 对象
  4. Response 对象

1.Application 对象

该对象是 Koa 的核心对象,通过该对象来初始化并创建 WebServer
它的应用代码就是:

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

2.listen 方法

WebServer 并不是在 Application 对象创建的时候就被创建的,而是在调用了 Application 下的 listen 方法的时候在创建

/**
 * File: /node_modules/koa/lib/application.js
***/

listen(...args) {
  debug('listen');
  const server = http.createServer(this.callback());
  return server.listen(...args);
}

通过源码可以看到,其本质还是通过 NodeJS 内置的 http 模块的 createServer 方法创建的 Server 对象。并且把 this.callback() 执行后的结果(函数)作为后续请求的回调函数

/**
 * File: /node_modules/koa/lib/application.js
***/

callback() {
  const fn = compose(this.middleware);

  if (!this.listenerCount('error')) this.on('error', this.onerror);

  const handleRequest = (req, res) => {
    const ctx = this.createContext(req, res);
    return this.handleRequest(ctx, fn);
  };

  return handleRequest;
}

通过上述代码的分析,实际上请求执行的回调函数式 callback 返回的 handleRequest 函数,且该函数接收的 reqres 参数就是 NodeJSHTTP 模块内置的两个对象 IncomingMessageServerResponse 对象。其中:

	const ctx = this.createContext(req, res);

这里, Koa 会调用 Application 对象下的 createContext 方法对 reqres 进行包装,生成 Koa 另外一个核心对象: Context 对象 - 后续分析

return this.handleRequest(ctx, fn);

接着调用 Application 对象下的 handleRequest 方法进行请求处理,并传入:

  • ctx: 前面提到的 Context 对象。
  • fn: 这个实际上是 const fn = compose(this.middleware); 这段代码得到的是一个执行函数,这里又称为: 中间件函数

总结

 类似资料: