当前位置: 首页 > news >正文

公司注册地址规定济南seo排名优化推广

公司注册地址规定,济南seo排名优化推广,网站开发语言分辨,做pc端大型网站+前端用上上节实现了上下文的,上一节使用了一下中间件,这一节来实现 koa 的中间件这个洋葱模型。 思路: 储存用户所有的 callback将用户传递的 callback 全部组合起来(redux 里的 compose)组合成一个线性结构依次执行&#…

上上节实现了上下文的,上一节使用了一下中间件,这一节来实现 koa 的中间件这个洋葱模型。

思路:

  • 储存用户所有的 callback
  • 将用户传递的 callback 全部组合起来(redux 里的 compose)
  • 组合成一个线性结构依次执行,组合完返回一个大的 promise
  • 当组合后的 promise 完成后,拿到最终的结果响应回去

application.js 代码实现如下:核心就是组合方法的实现

const EventEmitter = require("events");
const http = require("http");
const context = require("./context");
const request = require("./request");
const response = require("./response");console.log("kaimo-koa---->");class Application extends EventEmitter {constructor() {super();// 防止多个实例共享 context request response 需要进行拷贝this.context = Object.create(context);this.request = Object.create(request);this.response = Object.create(response);// 储存用户所有的 callbackthis.middlewares = [];}use(callback) {// 将用户传递的 callback 全部组合起来this.middlewares.push(callback);}// 创建一个上下文createContext(req, res) {// 每次请求都应该是一个全新的 context,需要拷贝let ctx = Object.create(this.context);// 上下文中有一个 request 对象,是自己封装的ctx.request = Object.create(this.request);// 上下文中还有一个 req 属性 指代的是原生的 req,自己封装的 request 对象上有 req 属性ctx.req = ctx.request.req = req;// 上下文中还有一个 response 对象,是自己封装的ctx.response = Object.create(this.response);// 上下文中还有一个 res 属性 指代的是原生的 res,自己封装的 response 对象上有 res 属性ctx.res = ctx.response.res = res;return ctx;}compose(ctx) {// 在数组中取出第一个,第一个执行后执行第二个const dispatch = (i) => {if (i === this.middlewares.length) return Promise.resolve();let middleware = this.middlewares[i];// 中间件如果不是 async 需要 Promise 包装一下,() => dispatch(i + 1) 就是 nextreturn Promise.resolve(middleware(ctx, () => dispatch(i + 1)));};return dispatch(0);}async handleRequest(req, res) {const ctx = this.createContext(req, res);// 组合成一个线性结构依次执行,组合完返回一个大的 promiseawait this.compose(ctx);// 当组合后的 promise 完成后,拿到最终的结果响应回去let body = ctx.body;res.end(body);}listen(...args) {const server = http.createServer(this.handleRequest.bind(this));server.listen(...args);}
}module.exports = Application;

然后我们编写测试 demo.js

const Koa = require("./kaimo-koa");const app = new Koa();const log = () => {return new Promise((resolve, reject) => {setTimeout(() => {console.log("kaimo313");resolve();}, 3000);});
};app.use(async (ctx, next) => {console.log(1);console.time("kaimo");await next();ctx.body = "hello 1";console.log(2);console.timeEnd("kaimo");
});app.use(async (ctx, next) => {console.log(3);await log();ctx.body = "hello 2";await next();console.log(4);
});app.use(async (ctx, next) => {console.log(5);ctx.body = "hello 3";await next();console.log(6);
});app.listen(3000);

启动服务,访问 http://localhost:3000/

nodemon demo.js

在这里插入图片描述

http://www.ds6.com.cn/news/37713.html

相关文章:

  • 介绍一学一做视频网站企业策划推广公司
  • 淮南房地产网站建设网站最彻底的手机优化软件
  • 怎么做网站内部链接的优化百度推广信息流有用吗
  • 中山网页模板建站百度推广代运营公司
  • 嘉善企业网站建设推广产品的软文
  • wordpress 4.0 主题常州seo第一人
  • 有什么网站可以做婚庆视频沈阳网页建站模板
  • 男的和女的做那个视频网站最近三天的新闻热点
  • 长沙网站建设 599优化网络培训
  • 设计开发建设网站平台站长工具官网查询
  • 一个人做网站 优帮云网络营销八大目标是什么
  • 这个域名的网站做违法的事北京做网站的公司排行
  • 医疗网站前置审批取消网络推广的公司更可靠
  • 南宁网站忧化网站模板大全
  • 做日用品的要找什么网站网站优化软件
  • 如何给网站做2维码关键词seo排名怎么选
  • 苍南网站建设苏州网站制作开发公司
  • 电商网站建设网企业宣传ppt
  • 域名备案成功怎么做网站电子商务主要干什么
  • 网站如何测试有无未做链接的文件360免费建站教程
  • 网站自助平台网站建设公司排名
  • 信宜最新疫情正规网站优化哪个公司好
  • 网站需要每个城市做推广吗网站关键词提升
  • 陕西省建设协会岗位证查询网站百度客服电话人工服务热线电话
  • 网站建设类文章如何提高网站在搜索引擎中的排名
  • 网页设计素材及代码邹平县seo网页优化外包
  • 怎么看网站pv线上营销活动有哪些
  • 企业网站的管理系统长春seo网站排名
  • 国内公司网站模板seo免费诊断联系方式
  • app产品网站建设成品人和精品人的区别在哪