Express middleware en el nodo (demostración y explicación del código)

1. El concepto de middleware

  1. Una comprensión simple del concepto de middleware: los datos se procesan en pasos desde la solicitud hasta la respuesta y luego se ejecutan de manera ordenada.Cada paso es un enlace de procesamiento intermedio.

  2. La esencia del middleware es un método de procesamiento de solicitudes. Distribuimos todo el proceso desde la solicitud del usuario hasta la respuesta a múltiples middleware para su procesamiento. El propósito de esto es mejorar la flexibilidad del código y ser escalable dinámicamente.

  3. El orden de escritura del middleware es importante

  4. El middleware en sí es un método que acepta tres parámetros. Cuando cada solicitud llega al servidor, nodejs crea un objeto de solicitud (solicitud) para la solicitud, que contiene los datos enviados por el cliente. Al mismo tiempo, también se crea un objeto de respuesta (respuesta), que es el principal responsable de responder a los datos del servidor al cliente. El último parámetro siguiente es un método, porque se pueden usar varios middleware en una aplicación, y si desea ejecutar el siguiente middleware, el middleware anterior debe ejecutarse next ().

    • solicitud : objeto de solicitud
    • respuesta : objeto de respuesta
    • siguiente : el próximo middleware

next es una función que se usa para llamar al siguiente middleware, pero no necesariamente al siguiente inmediatamente siguiente. Encontrará el primer middleware coincidente al revés. Si no hay coincidencia, continúe mirando hacia atrás.
Cuando una solicitud ingresa a un middleware, si no se llama a next (), la solicitud permanecerá en el middleware.


2. En Express, hay varias categorías de middleware

2.1 middleware a nivel de aplicación

Coincidencia universal: middleware que no se preocupa por la ruta de solicitud y el método de solicitud, lo que significa que cualquier solicitud ingresará a este middleware

let express = require('express');

let app = express();

app.use(function (req,res,next) {
    
    
  console.log('1:收到请求');
  next();
})

app.use(function (req,res,next) {
    
    
  console.log('2:收到请求');
})

2.2 Middleware de enrutamiento

2.2.1 relacionado con el /xxxmiddleware de la ruta de solicitud

// 路径以 /a 开头的请求才会进入
app.use('/a',function (req,res,next) {
    
    
  console.log('收到请求',req.url);
  res.send('end')
})

2.2.2 Middleware que coincide estrictamente con el método de solicitud y la ruta de solicitud

//当一个请求是 get 请求,且请求路径以 /a 开头,就会进入该中间件
app.get('/a',function (req,res,next) {
    
    
  console.log('get /a');
})

//当一个请求是 post 请求,且请求路径以 /login 开头,就会进入该中间件
app.post('/login',function (req,res, next) {
    
    
  console.log('get /login');
})

2.3 middleware incorporado

Express tiene las siguientes funciones de middleware integradas, capturas de pantalla del sitio web oficial
Inserte la descripción de la imagen aquí

let express = require('express');
let path = require('path');

let app = express();

//开放资源目录
app.use('/public',express.static(path.join(__dirname,'./public/')));

2.4 middleware de terceros

Para usar middleware de terceros para agregar funcionalidad a la aplicación Express, primero debe instalarla.

P.ej,npm install cookie-parser

var express = require('express')
var app = express()
var cookieParser = require('cookie-parser')

app.use(cookieParser())

2.5 middleware personalizado

2.5.1 Error al manejar el middleware

Configure un middleware que maneje 404. Si no hay ningún middleware que pueda manejarlo , ingrese este middleware. La premisa es poner este middleware al final.

app.use(function (req, res, next) {
    
    
  res.send('404')
})

2.5.2 Middleware de manejo de errores globales

let express = require('express');
let fs = require('fs')

let app = express();
app.get('/test', function (req, res, next) {
    
    
   //没有这个 cc.txt 文件,读取的时候会报错
  fs.readFile('./aa/bb/cc.txt', function (err, data) {
    
    
    if (err) {
    
    
      //当调用 next 的时候,如果传递了错误对象参数,则直接往后找到带有四个参数的应用程序级别的中间件
      next(err);
    }
  })
})

//注意四个参数一个都不能少!!!
//全局错误处理中间件,如果前边有一个中间件调用了next(err)方法,并传递了一个错误对象err作为参数,那么就会直接调用这个全局错误处理中间件
app.use(function (err, req, res, next) {
    
    
  res.status(500).json({
    
    
    err_code:500,
    message:err
  })
})

2.6 Notas

El mismo objeto de solicitud y el mismo objeto de respuesta son utilizados por el middleware que pasa por la misma solicitud.

Es decir, para la misma solicitud procesada por un middleware diferente, el objeto req es el mismo y el objeto res también es el mismo

app.get('/a',function (req,res,next) {
    
    
  console.log('get /a');
  req.foo = 'hello';//在这里给req对象增加了一个属性 foo
  next();
})

app.get('/a',function (req,res,next) {
    
    
  console.log('get /a');
  console.log(req.foo);//由于是同一个请求,我们在这里就可以使用req对象的foo
})

3. Información

Middleware de uso de red chino Express

Lista Express Chinese Net-Middleware

https://blog.csdn.net/weixin_33881041/article/details/86128587

Supongo que te gusta

Origin blog.csdn.net/weixin_43974265/article/details/112496837
Recomendado
Clasificación