Maison  >  Article  >  interface Web  >  Qu’est-ce que le middleware Express ? Comment l’utiliser dans Node ?

Qu’est-ce que le middleware Express ? Comment l’utiliser dans Node ?

青灯夜游
青灯夜游avant
2022-02-10 19:01:351942parcourir

Qu’est-ce que le middleware Express ? Comment l'utiliser dans Node ? L'article suivant vous présentera l'utilisation simple du middleware Express. J'espère qu'il vous sera utile !

Qu’est-ce que le middleware Express ? Comment l’utiliser dans Node ?

1. Qu'est-ce que le middleware Express

Le middleware fait spécifiquement référence au lien de traitement intermédiaire des processus métier.

2. Processus d'appel du middleware express

Lorsqu'une requête atteint le serveur Express, plusieurs middlewares peuvent être appelés en continu pour prétraiter la requête.

3. Le format middleware

est essentiellement une fonction de traitement de fonction

Remarque : la liste formelle des paramètres de la fonction middleware doit contenir le paramètre suivant. La fonction de traitement de routage ne contient que req et res,

// next参数必须在最后一个传入
const mw = (req, res, next) => {
    ...
    // next()必须在最后调用
    next()
}

4. Le rôle de la fonction next()

next est la clé pour réaliser l'appel continu de plusieurs middlewares. Cela signifie transférer la relation de circulation vers le middleware suivant. ou le routage.

5. Middleware globalement efficace

Toute requête initiée par le client déclenchera le middleware après avoir atteint le serveur, appelé middleware globalement efficace. En appelant server.use (fonction middleware), vous pouvez définir un middleware globalement efficace. L'exemple de code est le suivant :

const mw = (req, res, next) => {
    next()
}

const mw1 = (req, res, next) => {
    next()
}

// 全局生效的中间件,中间件调用顺序以传入顺序为准
server.use(mw,mw1)

6. Middleware efficace localement

Le middleware local ne fonctionne que sur un chemin de routage spécifié Efficace

const mw = (req, res, next) => {
    next()
}
const mw1 = (req, res, next) => {
    next()
}
// 局部生效的中间件
server.get('/',mw,(req,res)=>{
    res.send('路径:/')
})



// 定义多个局部生效的中间件
// 1、直接逗号分隔
server.get('/',mw,mw1,(req,res)=>{
    res.send('路径:/')
})
// 2、或者使用数组包含
server.get('/',[mw,mw1],(req,res)=>{
    res.send('路径:/')
})

7. Le rôle du middleware

Plusieurs middlewares partagent les mêmes req et res. Sur la base de cette fonctionnalité, nous pouvons ajouter uniformément des attributs ou des méthodes personnalisés aux objets req ou res dans le middleware en amont pour une utilisation par le middleware ou le routage en aval.

const mw = (req, res, next) => {
    // 添加属性
    req.startTime=new Date()
    next()
}

8. Cinq points à noter à propos du middleware Express

  • Assurez-vous d'enregistrer le middleware avant le routage

  • Les demandes envoyées par le client peuvent continuellement appeler plusieurs middlewares pour le traitement

  • Après l'exécution de l'entreprise code du middleware, n'oubliez pas d'appeler la fonction next()

  • Afin d'éviter toute confusion dans la logique du code, n'écrivez pas de code supplémentaire après avoir appelé la fonction next()

  • Lors de l'appel continu de plusieurs middlewares, partager des objets req et res entre plusieurs middlewares

9. Classification des middlewares express

  • Middleware au niveau de l'application

  • Middleware au niveau de la route

  • Middleware au niveau de l'erreur

  • Express construit- dans le middleware

  • Middleware tiers

Introduction détaillée :

  • Middleware au niveau de l'application

    Via app.use() ou app.get( ) ou app.post(), le middleware lié à l'instance d'application est appelée middleware au niveau de l'application. L'exemple de code est le suivant :

    // 全局生效的中间件(应用级别的中间件)
    server.use(mw,mw1)
    // 局部生效的中间件(应用级别的中间件)
    server.get('/',mw,mw1,(req,res)=>{
        res.send(`请求进入服务器的时间:${req.startTime}`)
    })
  • Middleware au niveau du routage

    lié à l'instance express.Router() Le middleware est appelé middleware au niveau du routage. Son utilisation n'est pas différente de celle d'un middleware au niveau de l'application. Cependant, le middleware au niveau de l'application est lié à l'instance d'application et le middleware au niveau du routage est lié à l'instance du routeur. L'exemple de code est le suivant :

    const router = require('./router/router')
    // 路由级别的中间件
    router.use((req,res,next)=>{
        next()
    })
  • Middleware au niveau de l'erreur

    Le rôle du middleware au niveau de l'erreur. : Spécialisé Utilisé pour capturer les erreurs anormales qui se produisent tout au long du projet afin d'éviter que le projet ne plante anormalement.

    Format : La fonction de traitement des fonctions du middleware de niveau d'erreur doit avoir 4 paramètres formels. L'ordre des paramètres formels d'avant en arrière est (err, req, res, next).

    Remarque : le middleware de niveau d'erreur doit être enregistré après toutes les routes !

    // 人为制造错误
    server.get('/err', (req, res) => {
        throw new Error('人为抛出错误!!!')
        res.send('err Page')
    })
    // 定义错误级别的中间件
    server.use((err, req, res, next) => {
        console.log('发生了错误:' + err.message);
        res.send('Error:'+err.message)
        next()
    })
  • Le middleware intégré d'Express

    Depuis la version Express 4.16.0, Express intègre 3 middlewares couramment utilisés, qui sont extrêmement améliorés. l'efficacité de développement et l'expérience des projets Express :

    • express.static est un middleware intégré qui héberge rapidement des ressources statiques, telles que : des fichiers HTML, des images, des styles CSS, etc. (pas de compatibilité)

    • express .json Analyser les données du corps de la requête au format JSON (avec compatibilité, disponible uniquement dans la version 4.16.0+)

    • express.urlencoded Analyser les données du corps de la requête au format codé URL (avec compatibilité, disponible uniquement dans la version 4.16.0+) ) Disponible dans)

    // 配置解析application/json格式数据的内置中间件
    server.use(express.json())
    // 配置解析application/x-www-form-urlencoded格式数据的内置中间件
    server.use(express.urlencoded({
        extended: false
    }))
    // 测试解析json的内置中间件
    server.post('/user',(req,res)=>{
        // 在服务器,可以使用req.body这个属性来接受客户端发送过来的请求数据
        // 默认情况下,如果不配置解析表单数据的中间件,则req.body默认等于undefined
        console.log(req.body);
        res.send('ok')
    })
    
    // 测试解析urlencoded的内置中间件
    server.post('/book',(req,res)=>{
        console.log(req.body)
        res.send('book ok')
    })
  • Le middleware tiers

    n'est pas officiellement intégré à Express, mais est développé par un tiers, appelé middleware tiers. Dans le projet, vous pouvez télécharger et configurer des middlewares tiers à la demande, améliorant ainsi l'efficacité du développement du projet. Par exemple : dans les versions antérieures à express@4.16.0, le middleware tiers body-parser était souvent utilisé pour analyser les données du corps de la requête. Les étapes d'utilisation sont les suivantes : express@4.16.0之前的版本中,经常使用body-parser这个第三方中间件,来解析请求体数据。使用步骤如下:

    • 运行npm install body-parser安装中间件

    • 使用require导入中间件

    • 调用server.use()

      🎜🎜Exécutez npm install body-parser pour installer le middleware 🎜🎜🎜🎜Utilisez require pour importer le middleware 🎜🎜🎜🎜Appelez server.use( ) Enregistrez-vous et utilisez le middleware 🎜

    Remarque : le middleware express.urlencoded intégré d'Express est en outre encapsulé sur la base de l'analyseur de corps de middleware tiers.

Pour plus de connaissances sur les nœuds, veuillez visiter : tutoriel nodejs !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer