express框架中间件

news2024/12/23 14:48:08

1.介绍

说明:Express框架中间件是指在处理HTTP请求前或后对请求和响应进行处理的函数。具体而言,中间件可以:

  1. 执行一些公共的逻辑,比如身份验证、日志记录、错误处理等。
  2. 修改请求和响应,比如缓存、压缩等。
  3. 控制请求流,比如路由控制、URL重定向等。

Express中间件可以是一个函数或是一组函数,它们按照定义的顺序依次执行。

2. 全局中间件

2.1介绍

说明:全局中间件是指在应用程序中处理每个请求之前和之后执行的中间件。这些中间件可以用于执行各种任务,例如身份验证、日志记录、处理错误等。在Express.js中,可以通过app.use()函数将中间件添加到应用程序中,使其成为全局中间件。这样,每个请求都会经过这个中间件,以便在应用程序中进行统一处理。

2.2声明中间件(其实就是一个函数,函数有三个形参而已)

// 声明中间件函数
function recordMiddle(req,res,next){
    //服务器的访问日志
    //获取url和ip
    let {url,ip}=req
    //将信息保存在文件中
    fs.appendFileSync(path.resolve(__dirname,"./access.log"),`${url} ${ip}\r\n`)
    //调用next
    next()
   
}

说明:next()是一个函数,表示中间件函数处理完当前请求后,将请求转移给下一个中间件函数来处理。如果当前中间件函数不调用next(),则请求就会被阻塞,无法继续向下执行。

2.3使用中间件

//使用中间件函数
app.use(recordMiddle)

 2.4完成获取url地址练习

const express=require("express")

const fs=require("fs")

const path=require("path")

const app=express()

// 声明中间件函数
function recordMiddle(req,res,next){
    //服务器的访问日志
    //获取url和ip
    let {url,ip}=req
    //将信息保存在文件中
    fs.appendFileSync(path.resolve(__dirname,"./access.log"),`${url} ${ip}\r\n`)
    //调用next
    next()
   
}
//使用中间件函数
app.use(recordMiddle)


app.get('/home',(req,res)=>{
 res.send("前台首页")
})

app.get('/admin',(req,res)=>{
    res.send("后台首页")
})

app.all('/*',(req,res)=>{
    res.send("<h1>404</h1>")
})

app.listen(9000,()=>{
    console.log(`9000端口启动成功`);
})

2.5效果

3.路由中间件

3.1介绍

说明:路由中间件是一个处理HTTP请求的函数,它根据请求的HTTP方法和路由路径来匹配一个或多个中间件函数,在这些中间件函数中执行一些操作,最终返回一个HTTP响应。

3.2声明中间件函数

//声明中间件,放在受约束的规则当中
let checkCode = (req, res, next) => {
    // 判断url中code是否包含521
    if (req.query.code === "521") {
      next();
    } else {
      res.send("无效");
    }
  };

3.3使用中间件(放在受约束的规则当中)

app.get("/pay", checkCode, (req, res) => {
  res.send("支付页面");
});

说明:当url地址有/pay的情况下,执行checkCode中间件函数。如果请求参数的code=521,那么就继续进行,如果没有,那么则无效。

3.4练习

说明:针对/admin /setting 的请求,需要URL携带code=521参数,如没有携带提示[无效]。

//针对/admin /setting 的请求,需要URL携带code=521参数,如没有携带提示[无效]
const express = require("express");

const app = express();

app.get("/home", (req, res) => {
  res.send("前台首页");
});

//声明中间件,放在受约束的规则当中
let checkCode = (req, res, next) => {
  // 判断url中code是否包含521
  if (req.query.code === "521") {
    next();
  } else {
    res.send("无效");
  }
};

app.get("/admin", checkCode, (req, res) => {
  res.send("后台首页");
});

app.get("/pay", checkCode, (req, res) => {
  res.send("支付页面");
});

app.all("*", (req, res) => {
  res.send("<h1>404</h1>");
});
app.listen(9000, () => {
  console.log(`9000端口启动成功`);
});

3.5效果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/726225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ModaHub魔搭社区:基于 Amazon EKS 搭建开源向量数据库 Milvus

目录 01 前言 02 架构说明 03 先决条件 04 创建 EKS 集群 05 部署 Milvus 数据库 06 优化 Milvus 配置 07 测试 Milvus 集群 08 总结 01 前言 生成式 AI&#xff08;Generative AI&#xff09;的火爆引发了广泛的关注&#xff0c;也彻底点燃了向量数据库&…

Ubuntu中删除LibreOffice方法

目录 删除LibreOffice套件 删除所有与LibreOffice相关的软件包 删除与LibreOffice相关的配置文件 删除LibreOffice套件 1、打开终端。您可以使用快捷键Ctrl Alt T来打开终端。 2、输入以下命令以卸载LibreOffice套件&#xff1a; sudo apt-get remove libreoffice* 删…

[管理与领导-7]:新任管理第1课:管理转身--从技术业务走向管理 - 管理常识1

目录 第1章 管理基本概念 1.1 什么是管理&#xff1f; 1.2 管理的要素与职能 第2章 管理是什么&#xff1f; 2.1 以终为始 2.2 资源的优化配置 2.3 分而治之&#xff1a;分目标、分任务、分权力、分利益 2.4 目标明确 2.5 优先级 2.6 知人善用&#xff0c;人尽其才 …

【零基础入门学习Python---Python与其他技术的整合之快速入门实践】

&#x1f680; 零基础入门学习Python&#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜…

2023和鲸夏令营创作活动【黄金价格分析预测】

2023和鲸夏令营创作活动【黄金价格分析预测】 文章目录 2023和鲸夏令营创作活动【黄金价格分析预测】一、项目背景二、数据说明三、数据预处理四、数据探索性分析五、构建LSTM模型预测1、构建LSTM模型2、绘制loss的变化曲线3、进行预测 一、项目背景 本项目的目标是分析并预测…

SpringBoot——在测试阶段验证Web表现层的接口是否正常

验证请求状态 之前我们实现了在测试环境中开启Web环境&#xff0c;并且在测试阶段发送虚拟请求&#xff0c;并看到了返回的结果&#xff0c;这次我们不止要看他的请求结果&#xff0c;还要看他的请求过程和请求状态 匹配请求状态 首先就是查看请求的状态。主要介绍的就是一个…

基于 Arduino 库实现 ESP32 使能 WiFi AP + TCP Server 的应用

实现步骤&#xff1a; ESP32 开启 WiFi AP 模式创建 WiFi 热点定义 IP 地址创建 TCP Server 测试代码如下&#xff1a; #include <WiFi.h> #include <WiFiClient.h>const char* ssid "cc123"; const char* password "espressif";WiFiServ…

Python-年会抽奖

#!/usr/bin/python # coding:utf-8 # Author:Rauckimport randomclass WhoIsLuck:"""年会抽奖"""# 奖品gift [{name: 一等奖, limit: 3, desc: 泰国5日游手术费报销},{name: 二等奖, limit: 6, desc: iPhone14手机},{name: 三等奖, limit: 30, …

【Linux OS】华为openEuler操作系统与openGauss数据库安装及使用入门

华为openEuler操作系统与openGauss数据库安装及使用入门 1、软件下载1.1、openEuler1.2、openGauss1.3、Data Studio 2、系统安装2.1、创建虚拟机2.2、安装操作系统2.3、登录系统 3、数据库安装及设置3.1、数据库安装3.2、数据库管理3.3、数据库设置 4、数据库访问4.1、Navicat…

Redis:IO多路复用深度解析

目录 一、Multiplexing&#xff08;IO多路复用&#xff09;1.是什么2.能干嘛3.Reactor设计模式4.select, poll, epoll 都是I/O多路复用的具体的实现4.1 select方法4.2 poll方法4.3 epoll方法4.4 三个方法对比 5.5种 I/O 模型总结6.为什么3个都保有 一、Multiplexing&#xff08…

关于如何使用 python 下载 json 格式数据

本章节内容节自《python编程从入门到实践》第十六章&#xff0c;我们将从网络上下载数据&#xff0c;并对数据进行可视化。就可以对其进行分析甚至观察其规律和关联。 学习目标 我们将访问并可视化以下两种常见格式存储的数据&#xff1a; CSV 使用 Python 模块 CSV 来处理以 C…

SpringBoot整合EasyExcel 3.x

文章目录 1 EasyExcel 3.x1.1 简介1.2 引入依赖1.3 简单导出1.3.1 定义实体类1.3.2 自定义转换器1.3.3 定义接口 1.4 简单导入1.5 复杂导出1.5.1 引言1.5.2 自定义注解1.5.3 定义实体类1.5.4 数据映射与平铺1.5.5 自定义单元格合并策略1.5.6 定义接口 1 EasyExcel 3.x 1.1 简介…

string容器语法

文章目录 string容器string基本概念本质&#xff1a;string和char * 区别&#xff1a;特点&#xff1a; string构造函数示例 string赋值操作示例&#xff1a; string字符串拼接示例&#xff1a; string查找和替换示例&#xff1a; string字符串比较示例&#xff1a; string字符…

第六章 rabbitmq高可用集群

在服务之间会采用mq进行消息通信,而rabbitmq本身也如同consul一样,如果只有一个节点那么就可能出现宕机的问题,并且基于mq的特点我们是可以在多个服务之间使用同一个mq来相互通信,因此高可用的架构设计就必不可少 1、rabbitmq集群方案 主备 远程 镜像 多活 构建 2、…

[uni-app]设置运行到微信小程序

1、设置微信小程序开发工具路径 2、检查微信小程序开发工具是否开启了服务端口 服务端口要是没有开启&#xff0c;会报 initialize。 3、在uni-app开发工具中点击运行微信开发者工具&#xff0c;微信开发工具运行成功。

Spark架构体系

StandAlone模式是spark自带的集群运行模式&#xff0c;不依赖其他的资源调度框架&#xff0c;部署起来简单。 StandAlone模式又分为client模式和cluster模式&#xff0c;本质区别是Driver运行在哪里&#xff0c;如果Driver运行在SparkSubmit进程中就是Client模式&#xff0c;如…

谷歌Med-PaLM 2霸榜医学问答领域

谷歌IO大会上&#xff0c;谷歌CEO桑达尔・皮查伊&#xff08;Sundar Pichai&#xff09;向全世界AI开发者发布了谷歌最新的大型语言模型&#xff08;LLMs&#xff09;PaLM 2&#xff0c;作为对标OpenAI最新大模型GPT-4的竞品&#xff0c;PaLM 2展现出了强大的多语言和推理能力。…

概率论与数理统计发展历史简介

概率论与数理统计发展历史简介 1 介绍1.1 概述1.2 概率论发展历史1.3 统计学发展历史1.4 概率论演化 2 在线学习在线 概率与统计 视觉化学习 -- 布朗大学何志坚老师的数理统计讲义鸢尾花书--统计至简 参考 1 介绍 1.1 概述 概率论是与概率有关的数学分支。虽然有几种不同的概…

Linux内核模块开发 第 8 章

The Linux Kernel Module Programming Guide Peter Jay Salzman, Michael Burian, Ori Pomerantz, Bob Mottram, Jim Huang译 断水客&#xff08;WaterCutter&#xff09;源 LKMPG 8 sysfs: 与模块交互 sysfs 允许用户通过读写模块中的变量实现与内核模块的交互。这个特性在…

leetcode907. 子数组的最小值之和(单调栈-java)

子数组的最小值之和 leetcode907. 子数组的最小值之和题目描述单调栈解法一代码演示单调栈解法二 单调栈专题 leetcode907. 子数组的最小值之和 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/sum-of-subarray-minimums…