Express中间件及简单应用

本文详细介绍了Express中间件的工作原理,包括应用层、路由器级和错误处理中间件的使用。通过实例展示了如何利用next()控制请求处理流程,以及在中间件数组中声明和调用中间件。同时,讲解了第三方中间件body-parser的使用,用于解析HTTP请求体,并通过登录验证的例子说明了如何在实际应用中实现功能扩展。最后,提到了设置静态资源托管和处理GET、POST请求参数的方法。
摘要由CSDN通过智能技术生成

Express中间件简介

Express是一个路由和中间件Web框架,其自身的功能很少:Express应用程序本质上是一系列中间件函数调用。

中间件功能是可以访问请求对象 (req)响应对象(res)应用程序的请求、响应周期中的下一个中间件功能的功能。

下一个中间件功能通常由名为的变量表示next

中间件功能可以执行以下任务:

  • 执行任何代码。
  • 更改请求和响应对象。
  • 结束请求-响应周期。
  • 调用堆栈中的下一个中间件函数。

通俗来讲,中间件就是处理过程中的一个环节

如果当前的中间件功能没有结束请求、响应周期,则必须调用next()将控制权传递给下一个中间件功能。否则,该请求将被挂起。

Express应用程序可以使用以下类型的中间件:

  • 应用层中间件
  • 路由器级中间件
  • 错误处理中间件
  • 内置中间件
  • 第三方中间件

不管是使用哪一种中间件,都要先引入express模块

应用层中间件

使用函数将应用程序级中间件绑定到应用程序对象的实例,其中,中间件函数处理的请求的HTTP方法是app.use()方法:

  1. 没有安装路径的中间件,每次服务器收到请求时,都会执行改功能
var app = express()

app.use((req, res, next)=>{
//获取访问的时间
  console.log(Date.now())
  next()
})
  1. 有安装路径的中间件功能,该函数针对/user路径上的任何类型的HTTP请求执行。
app.use('/user',(req,res,next)=>{
    //记录访问的日志
    console.log('访问了/user');
    next();
})
  1. middleware sub-stack(中间件子堆栈),该子栈将任何类型的HTTP请求的请求信息打印到/user/路径。
app.get('/abc',(req,res,next)=>{
    console.log(1);
    next();
},(req,res)=>{
    console.log(2); 
    // res.send('okk')
})
app.get('/abc',(req,res,next)=>{
    console.log(3);
    res.send('okkkk')
})
app.listen(3000,()=>{
    console.log('running...');
})

此时输出的结果是:
在这里插入图片描述
不会输出3的原因是:get请求定义了两条路由,1和2是同一个路由,3是另外一个路由,第二条路由不会引起任何问题,但是由于第一条路由将结束请求、响应周期,因此它将永远不会被调用,所以不会输出3
解决办法:调用next('route')方法,它的功能是从路由器中间件堆栈中跳过其余中间件功能,及跳转到下一个路由。

app.get('/abc',(req,res,next)=>{
    console.log(1);
    next('route');
},(req,res)=>{
    console.log(2); 
    // res.send('okk')
})
app.get('/abc',(req,res,next)=>{
    console.log(3);
    res.send('okkkk')
})
app.listen(3000,()=>{
    console.log('running...');
})

这样就可以输出3了
在这里插入图片描述

  1. 中间件也可以在数组中声明之后调用
const express = require('express');
const app = express();
var cb0 = function(req,res,next){
    console.log('cb0');
    next();
}
var cb1 = function(req,res,next){
    console.log('cb1');
    next();
}
var cb2 = function(req,res){
    res.send('pilapalala');
}

app.get('/okk',[cb0,cb1,cb2]);
app.listen(3000,()=>{
    console.log('running...')
})

在这里插入图片描述

第三方中间件

使用第三方中间件向Express应用程序添加功能。安装Node.js模块以获得所需的功能,然后在应用程序级别或路由器级别将其加载到应用程序中。

$ npm install body-parser
var bodyParser = require('body-parser')

body-parser是一个HTTP请求体解析的中间件,使用这个模块可以解析JSON、Raw、文本、URL-encoded格式的请求体

body-parser模块的API
当请求体解析之后,解析值会被放到req.body属性中,当内容为空时候,为一个空对象{}

  • bodyParser.json()–解析JSON格式
  • bodyParser.raw()–解析二进制格式
  • bodyParser.text()–解析文本格式
  • bodyParser.urlencoded()–解析文本格式

利用第三方中间实现登录验证的功能

第一步:安装body-parser 第三方中间件,并引入js文件中

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
//挂载 参数处理的中间件---post请求
app.use(bodyParser.urlencoded({extended:false}));
app.post('/ok',(req,res)=>{
    //获取请求的参数
    let data = req.body;
    console.log(data);
})

app.listen(3000,()=>{
    console.log('running...');
})

第二步:创建public文件夹===>创建ok.html页面 页面内容如下:

    <form action="http://localhost:3000/ok" method="POST">
        用户名:
        <input type="text" name="username" id="name"><br>
        密码:
        <input type="password" name="password" id="pwd"><br>
        <input type="submit" value="提交" id="btn">
    </form>

第三步:设置根目录

//挂载内置的中间件 处理静态资源文件托管
app.use(express.static('public'));

第四步:测试结果,查看后台打印的结果
在这里插入图片描述
第五步:添加判断用户名和密码是否正确条件

app.post('/ok',(req,res)=>{
    //动态路由获取参数--req.params
    //获取请求的参数
    let data = req.body;
    console.log(data);
    //data是对象类型
    if (data.username=='admin'&&data.password=='222') {
        res.send('success')
    }else{
        res.send('failure')
    }
    res.send('ok')
})

第六步:处理get参数代码

app.get('/ok',(req,res)=>{
    //获取请求的参数
    let data = req.query;
    console.log(data);
    //data是对象类型
    if (data.username=='admin'&&data.password=='222') {
        res.send('get success')
    }else{
        res.send('get failure')

    }
    res.send('ok')
})

测试之前修改页面数据提交方式–>get
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值