1. El concepto de middleware
-
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.
-
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.
-
El orden de escritura del middleware es importante
-
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 /xxx
middleware 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
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