首页 > 其他分享 >Express - 中间件

Express - 中间件

时间:2023-08-20 13:12:23浏览次数:33  
标签:req 函数 res app Express 中间件 next

中间件编写

中间件函数可以接受三个参数,req(请求),res(响应)和next(下一个中间件函数)。

如果这个中间件不结束请求/响应循环,就需要调用next函数。先装载的中间件函数会被先执行,如果忘记调用next函数,会导致后装载的中间件被忽略。

使用中间件

应用层中间件

可以使用 app.use()app.METHOD() 将中间件绑定至应用程序实例,

这是一个没有指定路由的例子,应用程序每次收到请求时执行该函数。

var app = express();

app.use(function (req, res, next) {
  console.log('Time:', Date.now());
  next();
});

这是一个安装在 /user/:id 路径中的中间件函数。在 /user/:id 路径中为任何类型的 HTTP 请求执行此函数。

app.use('/user/:id', function (req, res, next) {
  console.log('Request Type:', req.method);
  next();
});

这是一个安装在 /user/:id 路径中的中间件函数。在 /user/:id 路径中为 GET 请求执行此函数。

app.get('/user/:id', function (req, res, next) {
  console.log('Request Type: GET');
  next();
});

你可以在一个app.use()app.METHOD()传入多个中间件函数,或者传入一组中间件函数,他们会按照载入顺序执行。

路由器层中间件

路由器层中间件的工作方式与应用层中间件基本相同,差异之处在于它绑定到 express.Router() 的实例。

下面是一个简单的例子:

var express = require("express");
var router = express.Router();

/* GET home page. */
router.get("/", function (req, res, next) {
  res.render("index", { title: "Express" });
});

router.get("/test", function (req, res, next) {
  res.render("layout", { title: "Test Page", content: "测试页面" });
});

module.exports = router;

错误处理中间件

与普通中间件不同是的,错误处理中间件必须传入四个参数,即使某个参数用不到。按照参数顺序,分别是err,req,res,next。

app.use(function(err, req, res, next) {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

注意,错误处理中间件应当在最后定义。

如果将错误传递到 next() 且未在错误处理程序中进行处理,那么该错误将由内置的错误处理程序处理;

内置中间件

Express 中唯一内置的中间件函数是 express.static。用于处理静态资源。在之前的文章中简单介绍过这个函数的使用方法。在这里具体介绍一下。

express.static(root, [options])

root 自变量指定从其中提供静态资源的根目录。

可选的 options 对象可以具有以下属性:

属性 描述 类型 缺省值
dotfiles 是否对外输出文件名以点(.)开头的文件。有效值包括“allow”、“deny”和“ignore” 字符串 “ignore”
etag 启用或禁用 etag 生成 布尔 true
extensions 用于设置后备文件扩展名。 数组 []
index 发送目录索引文件。设置为 false 可禁用建立目录索引。 混合 “index.html”
lastModified 将 Last-Modified 的头设置为操作系统上该文件的上次修改日期。有效值包括 true 或 false。 布尔 true
maxAge 设置 Cache-Control 头的 max-age 属性(以毫秒或者 ms 格式中的字符串为单位) 数字 0
redirect 当路径名是目录时重定向到结尾的“/”。 布尔 true
setHeaders 用于设置随文件一起提供的 HTTP 头的函数。 函数

下面是一个例子:

var options = {
  dotfiles: 'ignore',
  etag: false,
  extensions: ['htm', 'html'],
  index: false,
  maxAge: '1d',
  redirect: false,
  setHeaders: function (res, path, stat) {
    res.set('x-timestamp', Date.now());
  }
}

app.use(express.static('public', options));

第三方中间件

除了自己编写中间件和使用内置中间件,你也可以使用包管理器安装一些第三方提供的中间件函数,然后在Express使用。
常见的第三方中间件列表:https://expressjs.com/en/resources/middleware.html

标签:req,函数,res,app,Express,中间件,next
From: https://www.cnblogs.com/orzmiku/p/Express_3.html

相关文章

  • Express - 路由
    路由定义采用以下结构:app.METHOD(PATH,HANDLER)METHOD是请求方法,PATH是路径,HANDLER是处理路由的回调函数。路由方法Express支持对应于HTTP方法的以下路由方法:get、post、put、head、delete、options、trace、copy、lock、mkcol、move、purge、propfind、proppatch、unlo......
  • Express - 模板引擎
    在使用模板引擎之前,需要设置模板目录,指定模板引擎。views:模板文件所在目录。例如:app.set('views','./views')viewengine:要使用的模板引擎。例如:app.set('viewengine','pug')设置好模板引擎之后,需要使用包管理器安装对应的模板引擎。npminstallpug--save下面以pug引......
  • 中间件
    什么是中间件?中间件是一种独立的服务程序,分布式应用软件借助中间件在不同的技术之间共享资源。由于中间件技术正处于发展过程之中,因此目前尚不能对它进行精确的定义。比较流行的定义是:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资......
  • AOP源码解析:AspectJExpressionPointcutAdvisor类
    先看看AspectJExpressionPointcutAdvisor的类图再了解一下切点(Pointcut)表达式,它指定触发advice的方法,可以精确到返回参数,参数类型,方法名1packageconcert;23publicinterfacePerformance{4voidperform();5}AspectJExpressionPointcutAdvisor源码,官......
  • 构建高性能的后端服务:使用 Node.js、Express 和 MongoDB
    在现代应用开发中,构建高性能的后端服务是关键所在。本文将介绍如何使用Node.js、Express框架和MongoDB数据库来构建一个高性能的后端服务,实现数据存储与检索。为什么选择Node.js、Express和MongoDB?Node.js:Node.js是一个基于ChromeV8引擎的JavaScript运行时,具有非阻塞......
  • [LeetCode][10]regular-expression-matching
    ContentGivenaninputstrings andapatternp,implementregularexpressionmatchingwithsupportfor'.'and'*'where:'.'Matchesanysinglecharacter.​​​​'*'Matcheszeroormoreoftheprecedingelement.T......
  • LeetCode[10]RegularExpressionMatching
    ContentGivenaninputstrings andapatternp,implementregularexpressionmatchingwithsupportfor'.'and'*'where:'.'Matchesanysinglecharacter.​​​​'*'Matcheszeroormoreoftheprecedingelement.T......
  • Adobe Express正式对所有用户开放,并具备生成式AI功能
         据了解,日前Adobe宣布旗下的图形设计工具AdobeExpress目前已经向所有用户开放。AdobeExpress最初被称为AdobeSpark,针对现有的测试人员,部分高级功能将会继续限免一段时间,不过可以获得30天的高级会员试用,继续访问所有优质内容和功能obghtysuew。而该公司对该......
  • .NET应用UI组件DevExpress XAF v23.1 - 全新的日程模块
    DevExpressXAF是一款强大的现代应用程序框架,允许同时开发ASP.NET和WinForms。DevExpressXAF采用模块化设计,开发人员可以选择内建模块,也可以自行创建,从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。在新版中,DevExpressXAF组件发布了全新的日程模块、能自定义详......
  • mysql代理、中间件技术
    mysql代理、中间件技术代理简介名词DBproxy数据库中间件功能读写分离:读写分离导致处理速度迅速,一般情况下是主服务器进行写操作而从服务器进行读操作负载均衡支持数据的分片自动路由和聚合本文主要围绕Mycat实现、且在完成MM-SS集群的条件下实验步骤1.配置五台虚拟机......