nodejs之express的中间件
express中间件分成三种
内置中间件 static
const express = require("express");
const app = express();
//  test1接口
app.get("/test1",(req,res) => {
    res.send("test1 ok")
})
//  test2接口
app.get("/test2",(req,res) => {
    res.send("test2 ok")
})
//  开启服务器
app.listen(2000,() => {
    console.log('开启在2000端口');
})
const express = require("express");
const app = express();
app.use("/",(req,res,next)=>{
    console.log("中间件")
})
//  test1接口
app.get("/test1",(req,res) => {
    console.log('test1');
    res.send("test1 ok")
})
//  test2接口
app.get("/test2",(req,res) => {
    console.log('test2');
    res.send("test2 ok")
})
//  开启服务器
app.listen(2000,() => {
    console.log('开启在2000端口');
})
现在在浏览器中请求/test1 没有响应,在终端中打印出来

这个中间件的作用在于 请求/开头的路径时 优先走中间件的回调函数 中间件里的next()表示是否继续往下执行 ,有next()就继续往下走, 没有next()就不往下走
const express = require("express");
const app = express();
app.use("/",(req,res,next)=>{
    console.log("中间件")
    next()  //  是否继续往下执行
})
//  test1接口
app.get("/test1",(req,res) => {
    console.log('test1');
    res.send("test1 ok")
})
//  test2接口
app.get("/test2",(req,res) => {
    console.log('test2');
    res.send("test2 ok")
})
//  开启服务器
app.listen(2000,() => {
    console.log('开启在2000端口');
})
页面中

终端打印

简单来说 在来到/test1接口之前 有个拦截器,这个拦截器中的路径是/, 所有的接口都先走这个拦截器,在这个拦截器里做逻辑处理,允许它继续往下走就加next() ,不允许往下走就不用加next(), 因此验证上文提到的token,就可以在中间件里进行
const express = require("express");
const app = express();
app.use("/",(req,res,next)=>{
    console.log("中间件")
    let {token} = req.query;
    if(token){
        next()  //  是否继续往下执行
    }else{
        res.send("缺少token")
    }
})
//  test1接口
app.get("/test1",(req,res) => {
    console.log('test1');
    res.send(`test1 token为${req.query.token}`)
})
//  test2接口
app.get("/test2",(req,res) => {
    console.log('test2');
    res.send(`test2 token为${req.query.token}`)
})
//  开启服务器
app.listen(2000,() => {
    console.log('开启在2000端口');
})
浏览器中访问/test1 不带token字段

现在带上token字段访问/test2

这就实现了通过中间件做全局拦截,这种中间件属于自定义拦截器.如果app.use()的第一个参数是 / 表示路径,则第一个参数可以不写,如下
app.use("/",(req,res,next)=>{
    next()  //  是否继续往下执行
})
等同于
app.use((req,res,next)=>{
    next()  //  是否继续往下执行
})
这也可以说为什么body-parser是一个中间件
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({extended:false}))
app.use(bodyParser.json())
const express = require("express");
const app = express();
app.get("/demo",(req,res,next) => {
    console.log('fun1');
},(req,res) => {
    console.log('fun2');
})
//  开启服务器
app.listen(2000,() => {
    console.log('开启在2000端口');
})
在第一个回调函数中加上next()看看
const express = require("express");
const app = express();
app.get("/demo",(req,res,next) => {
    console.log('fun1');
    next()
},(req,res) => {
    res.send("fun2")
    console.log('fun2');
})
//  开启服务器
app.listen(2000,() => {
    console.log('开启在2000端口');
})
浏览器中访问/demo

终端打印

这种叫局部中间件,局部中间件是 在哪个接口里写就只对哪个接口有用,局部中间件可以写无数个 只要在合适的地方使用next()就可以一个接一个的往下执行,一般情况下使用局部中间件最多使用一两个就够了 使用多个局部中间件 代码结构如下
app.get("/test",fun1,fun2,fun3,fun4,fun5..)
app.use(express.static("./public"))
在public目录下新建一个index.html文件 写上内容

浏览器访问/index.html

app.use("/",express.static("./public"))
app.use("/public/test/",express.static("./public"))
浏览器访问时应该输/public/test/index.html了

nodejs之express的中间件的更多相关文章
- 【nodejs】--express的中间件multer实现图片文件上传--【XUEBIG】
		
Multer是nodejs中处理multipart/form-data数据格式(主要用在上传功能中)的中间件.该中间件不处理multipart/form-data数据格式以外的任何形式的数据 Tips ...
 - 77.深入理解nodejs中Express的中间件
		
转自:https://blog.csdn.net/huang100qi/article/details/80220012 Express是一个基于Node.js平台的web应用开发框架,在Node.j ...
 - nodejs之express中间件cookie-parser使用
		
知识点: * .domain的使用,.aaa.com的域名都共享这个cookie信息 * res.cookie(,domain:'.aaa.com'}); * .获取所有cookie,设置cookie ...
 - nodejs的express使用介绍
		
Express框架 来自<JavaScript 标准参考教程(alpha)>,by 阮一峰 目录 概述 运行原理 底层:http模块 什么是中间件 use方法 Express的方法 all ...
 - nodejs学习--express篇
		
express篇:http://www.runoob.com/nodejs/nodejs-express-framework.html Express 提供了内置的中间件 express.static ...
 - NodeJS 框架 Express 从 3.0升级至4.0的新特性
		
NodeJS 框架 Express 从 3.0升级至4.0的新特性 [原文地址:√https://scotch.io/bar-talk/expressjs-4-0-new-features-and-u ...
 - [转] NodeJS框架express的途径映射(路由)功能及控制
		
NodeJS框架express的路径映射(路由)功能及控制 我们知道Express是一个基于NodeJS的非常优秀的服务端开发框架,本篇CSSer将提供express框架的route和route co ...
 - nodejs之express的使用
		
Express是目前最流行的基于Node.js的Web开发框架,可以快速的搭建一个完整功能的网站. Express框架建立在内置的http模块上,http模块生成服务器的原始代码如下. var htt ...
 - 单页面应用的History路由模式express后端中间件配合
		
这篇文章主要分享一下通过HTML5的history API的时候,使用NodeJS后端应该如何配置,来避免产生404的问题,这里是使用的express的框架,主要是通过connect-history- ...
 
随机推荐
- Ionic4 Cordova 调用原生硬件 Api 实现扫码功能
			
QR Scanner 速度快,样式随心所欲,默认只能扫二维码 https://ionicframework.com/docs/native/qr-scanner/ 安装插件 ionic cordova ...
 - java8 数据集过滤removeIf和filter
			
对象如下,需求:只要30岁以下的人 //求职者的实体类 public class Person { private String name;//姓名 private Integer age;//年龄 ...
 - System.InvalidOperationException:“No coercion operator is defined between types 'System.Int16' and 'System.Boolean'.”
			
modelBuilder.Entity<MentItems>().Property(e=>e.IsValid) .HasColumnType("bit(1)") ...
 - SAP 增强篇 Method1  BADI增强的查找方法
			
查找BADI的方法:(1)通过SE24,输入CL_EXITHANDLER,然后在方法GET_INSTANCE中设置断点,然后运行事务代码判断 exit_name的值,操作过程如下:输入se24,然后输 ...
 - LeetCode_401. Binary Watch
			
401. Binary Watch Easy A binary watch has 4 LEDs on the top which represent the hours (0-11), and th ...
 - Eureka 与 zookeeper 的区别、
			
前言在微服务的开发过程中,如果使用的是 Dubbo 那就必须使用到 Zookeeper ,在使用 Spring Cloud Eureka 时,自然其功能更强大得多.博主也不得不感叹,Spring Cl ...
 - mysql的HA及openstack和k8s区别
			
数据库HA(Hight Availability) mysql自身支持主主/主备部署,多主(>2),一主多备 galera mariadb集群:多主相互备份 修改容器的启动配置 修改Docker ...
 - C# 代码自动生成工具
			
开源:C# 代码自动生成工具,支持站点前后台 前言 写这个项目有很长一段时间了,期间也修修改改,写到最后,自己也没咋用(研究方向变化了). 正文 具体项目开源了:https://github.co ...
 - unix系统简明教程 命令
			
who 显示电脑用户信息 liu :0 Oct 6 13:17 (:0)liu pts/2 Oct 6 13:22 (:0) who a ...
 - mac 上更改环境变量
			
第一次配置Mac的环境变量,到网上转了一圈才找到正确方法. 打开终端,新建.bash_profile文件在~/目录下(如果电脑里已经有了这个文件,跳过这一步) touch ~/.bash_profil ...