如何从头实现一个如何从头实现一个node.js的的koa框架框架
主要介绍了如何从头实现一个node.js的koa框架,koa.js是最流行的node.js后端框架之一,有很多网站都使用
koa进行开发,同时社区也涌现出了一大批基于koa封装的企业级框架。,需要的朋友可以参考下
前言前言
koa.js是最流行的node.js后端框架之一,有很多网站都使用koa进行开发,同时社区也涌现出了一大批基于koa封装的企业级
框架。然而,在这些亮眼的成绩背后,作为核心引擎的koa代码库本身,却非常的精简,不得不让人惊叹于其巧妙的设计。
在平时的工作开发中,笔者是koa的重度用户,因此对其背后的原理自然也是非常感兴趣,因此在闲暇之余进行了研究。不过
本篇文章,并不是源码分析,而是从相反的角度,向大家展示如何从头开发实现一个koa框架,在这个过程中,koa中最重要
的几个概念和原理都会得到展现。相信大家在看完本文之后,会对koa有一个更深入的理解,同时在阅读本文之后再去阅读
koa源码,思路也将非常的顺畅。
首先放出笔者实现的这个koa框架代码库地址:simpleKoa
需要说明的是,本文实现的koa是koa 2版本,也就是基于async/await的,因此需要node版本在7.6以上。如果读者的node版
本较低,建议升级,或者安装babel-cli,利用其中的babel-node来运行例子。
四条主线四条主线
笔者认为,理解koa,主要需要搞懂四条主线,其实也是实现koa的四个步骤,分别是
封装node http Server
构造resquest, response, context对象
中间件机制
错误处理
下面就一一进行分析。
主线一:封装主线一:封装node http Server: 从从hello world说起说起
首先,不考虑框架,如果使用原生http模块来实现一个返回hello world的后端app,代码如下:
let http = require('http');
let server = http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world');
});
server.listen(3000, () => {
console.log('listenning on 3000');
});
实现koa的第一步,就是对这个原生的过程进行封装,为此,我们首先创建application.js实现一个Application对象:
// application.js
let http = require('http');
class Application {
/**
* 构造函数
*/
constructor() {
this.callbackFunc;
}
/**
* 开启http server并传入callback
*/
listen(...args) {
let server = http.createServer(this.callback());
server.listen(...args);
}
/**
* 挂载回调函数
* @param {Function} fn 回调处理函数
*/
use(fn) {
this.callbackFunc = fn;
}
/**
* 获取http server所需的callback函数
* @return {Function} fn
*/
callback() {
return (req, res) => {