最后就是来实现koa2中的中间件实现机制
**使用了Promise.resolve与Promise.reject,这样做是因为koa2是一个基于处理aysnc/await
所做的一个框架,其目的是为了处理异步操作,因此在这里需要去使用Promise.resolve与Promise.reject。**
在constructor当中首先需要的就是去创建一个midderwareList = []数组,用于存放中间,然后创建一个use和
一个listen()函数,再use函数中,只需要将fn导入到middlewareList当中即可。对于listen()函数,首先创建
一个server,然后就是对**在http.createServer()中去调用一个callback回调函数,在这个回调函数中,首先是
引入fn,然后返回(req,res) => {}函数,在这里还创建了一个createContent函数,用于去整合req,res生成ctx
然后还需要创建一个handleRequest函数**,用于处理fn与ctx最后在这个callback函数中去使用。到目前为止,
关于koa2中的回调函数处理完成,具体的代码如下:
const http = require(‘http’);
//组合中间件
const componse = (middlewareList) => {
//中间件运行机制
**return (ctx) => {
const dispath = (i) => {
const fn = middlewareList[i];
try{
return Promise.resolve(
fn(ctx, dispath.bind(null, i + 1))
)
}catch(err){
return Promise.reject(err)
}
}
return dispath(0)
}**
}
class LikeKoa2{
constructor(){
this.middlewareList = []
}
use(fn){
this.middlewareList.push(fn);
return this;
}
createContent(req, res) {
//返回ctx
const ctx = {
req,
res
}
ctx.query = req.query;
return ctx
}
handleRequest(fn, ctx) {
return fn(ctx);
}
callback(){
const fn = componse(this.middlewareList)
return (req, res) => {
const ctx = this.createContent(req,res);
return this.handleRequest(fn,ctx)
}
}
listen(…args){
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
前端面试题汇总
JavaScript
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
性能
linux
前端资料汇总
img.cn/img_convert/d7f6750332c78eb27cc606540cdce3b4.png)
linux
前端资料汇总