提示:以下是本篇文章正文内容,下面案例可供参考
安装koa第三方包
nvm install koa -S
npm i koa -S
使用koa的文件中引入koa
const Koa = require('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 ')
}
Koa
对 NodeJS
原生 IncomingMessage
和 ServerResponse
对象和解析响应通用流程进行了包装,并提供了几个核心类(对象)用于其它各种用户业务调用
该对象是 Koa
的核心对象,通过该对象来初始化并创建 WebServer
它的应用代码就是:
const Koa = require('koa');
const app = new Koa();
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
函数,且该函数接收的 req
和 res
参数就是 NodeJS
中 HTTP
模块内置的两个对象 IncomingMessage
和 ServerResponse
对象。其中:
const ctx = this.createContext(req, res);
这里, Koa
会调用 Application
对象下的 createContext
方法对 req
和 res
进行包装,生成 Koa
另外一个核心对象: Context
对象 - 后续分析
return this.handleRequest(ctx, fn);
接着调用 Application
对象下的 handleRequest
方法进行请求处理,并传入:
Context
对象。const fn = compose(this.middleware);
这段代码得到的是一个执行函数,这里又称为: 中间件函数