我的编程空间,编程开发者的网络收藏夹
学习永远不晚

nodejs express实现中间件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

nodejs express实现中间件

先看应用

应用规则:

  • express 中 use 的第一个参数是匹配路径 不传相当于"/"
  • 中间件匹配机制是惰性匹配,即匹配路径为/a的中间件,访问/aa时同样会被执行(这也意味着不传匹配路径时即所有请求都会应用此中间件)
const express = require("./express");
const app = express();
// 第一个参数是匹配路径 不传相当于"/"
app.use(function (req, res, next) {
  req.a = 1;
  next();
});
app.use("/", function (req, res, next) {
  req.a++;
  next();
});
app.get("/", function (req, res, next) {
  res.end(req.a + "");
});
app.use("/a", function (req, res, next) {
  req.a++;
  next();
});
app.get("/a", function (req, res, next) {
  res.end(req.a + "");
});
app.listen(3000);

实现思路

结合之前的路由实现,其实中间件就是【没有路由表】的 Layer,我们只需要

  • 订阅监听时做下对“不传匹配路径”等情况的处理
  • 请求发布时根据“是否具有路由表route属性”进行判断从而对中间件区分处理

如此即可

具体实现

订阅监听时做下对“不传匹配路径”等情况的处理

定义use方法

Router.prototype.use = function (path, ...handlers) {
  if (!handlers[0]) {
    // 只传递了一个函数
    handlers.push(path); // app.use(function(){})  app.use()
    path = "/";
  }
  handlers.forEach((handler) => {
    let layer = new Layer(path, handler);
    layer.route = undefined; // 不写也是 undefined , 主要告诉你 中间件没有 route
    this.stack.push(layer);
  });
};

请求发布时根据“是否具有路由表route属性”进行判断从而对中间件区分处理

改写handle方法

Router.prototype.handle = function (req, res, done) {
  let { pathname } = url.parse(req.url);
  let method = req.method.toLowerCase();
  let idx = 0;
  const next = (err) => {
    // 中间件 和内部的 next 方法 出错都会走这个 next
    if (idx >= this.stack.length) return done(); // 路由处理不了 传递给应用层
    let layer = this.stack[idx++];
    // 无论是路由还是中间件 前提是路径必须匹配
    if (layer.match(pathname)) {
      // match 还没有更改
      if (!layer.route) {
        // 没有说明是中间件   注意 此处就是对中间件的区分处理
        layer.handle_request(req, res, next); // 直接执行中间件函数
      } else {
        // 路由必须匹配方法
        if (layer.route.methods[method]) {
          // 这个 next 可以让路由层扫描下一个 layer
          layer.handle_request(req, res, next); // route.dispatch
        } else {
          next();
        }
      }
    } else {
      next();
    }
  };
  next(); // 请求来了取出第一个执行
};

总结流程

以上就是nodejs express实现中间件的详细内容,更多关于nodejs express中间件的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

nodejs express实现中间件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

nodejs express实现中间件

这篇文章主要为大家介绍了nodejs express实现中间件实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

Nodejs+express中间件实现文件上传的方法

小编给大家分享一下Nodejs+express中间件实现文件上传的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!用nodejs做项目时需要用到文件上传的功能,
2023-06-14

Nodejs中Express 常用中间件 body-parser 实现解析

写在前面 body-parser是非常常用的一个express中间件,作用是对post请求的请求体进行解析。使用非常简单,以下两行代码已经覆盖了大部分的使用场景。app.use(bodyParser.json()); app.use(bod
2022-06-04

nodejs开发——express路由与中间件

路由 通常HTTP URL的格式是这样的: http://host[:port][path] http表示协议。 host表示主机。 port为端口,可选字段,不提供时默认为80。 path指定请求资源的URI(Uniform Resour
2022-06-04

深入理解nodejs中Express的中间件

Express是一个基于Node.js平台的web应用开发框架,在Node.js基础之上扩展了web应用开发所需要的基础功能,从而使得我们开发Web应用更加方便、更加快捷。 举一个例子: 用node.js实现一个控制台打印“hello se
2022-06-04

Nodejs之Express中间件的分类介绍

这篇文章主要介绍了Nodejs之Express中间件的分类,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-12-03

nodejs中间件Koa和Express有什区别

这篇文章将为大家详细讲解有关nodejs中间件Koa和Express有什区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Koa用起来非常方便——比之express,它“完美中间件”的设计让功能之间看起来
2023-06-06

Nodejs+express+html5 实现拖拽上传

一、前言 文件上传是一个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传。给用户体验带来很大问题。html5开始支持拖拽上传的需要的api。nodejs也是一个最近越来越流行的技术,这也是自己
2022-06-04

nodejs+express实现文件上传下载管理网站

nodejs+express-实现文件上传下载管理的网站 项目Github地址:https://github.com/qcer/updo 后端:基于nodejs的express的web框架. 前端:bootstrap框架+vuejs、jqu
2022-06-04

基于nodejs+express(4.x+)实现文件上传功能

Nodejs是一个年轻的编程框架,充满了活力和无限激情,一直都在保持着快速更新。基于Nodejs的官方Web开发库Express也在同步发展着,每年升级一个大版本,甚至对框架底层都做了大手术。在Express4时,替换掉中件间库connec
2022-06-04

浅谈express 中间件机制及实现原理

简介中间件机制可以让我们在一个给定的流程中添加一个处理步骤,从而对这个流程的输入或者输出产生影响,或者产生一些中作用、状态,或者拦截这个流程。中间件机制和tomcat的过滤器类似,这两者都属于责任链模式的具体实现。 express 中间件使
2022-06-04

编程热搜

目录