zoukankan      html  css  js  c++  java
  • Express中间件

    一、编写中间件

    中间件函数能够访问请求对象(req),响应对象(res),应用程序的请求/响应循环中的下一个中间件函数。下一个中间件函数通常由名为next的变量来表示。
    中间件函数可以执行以下任务:

    • 执行任何代码
    • 对请求或响应对象进行更改
    • 结束请求/响应循环
    • 调用堆栈中的下一个中间件
      注意:如果中间件函数没有结束请求/响应循环,那么必须调用next()函数,以将控制权传递给下一个中间件,否则请求将保持挂起状态。

    1.创建一个中间件函数

    var myLogger = function(req,res,next) {
        console.log('logger')
        next();
    }
    

    2.装入中间件

    要装入中间件,要调用app.use(),并指定中间件函数。

    var express = require('express')
    var app = express()
    
    var myLogger = function(req,res,next) {
        console.log('logger')
        next();
    }
    app.use(myLogger)
    app.get('/', function (req, res) {
      res.send('Hello World!');
    });
    
    app.listen(3000);
    

    中间件装入的顺序很重要,首先装入的中间件函数也首先被执行

    二、使用中间件

    Express是一个路由和中间件web框架。其自身只具有最低程度的功能。Express应用程序基本上是一系列中间件函数调用。

    1.Express中间件的分类

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

    1.1应用层中间件

    使用app.use()或者app.Method()函数将应用层中间件绑定到应用程序对象的实例上。

    //应用程序每次收到请求时执行该函数
    var app = express()
    app.use(function (req, res, next) {
      console.log('Time:', Date.now());
      next();
    });
    
    //此示例显示安装在 /user/:id 路径中的中间件函数。在 /user/:id 路径中为任何类型的 HTTP 请求执行此函数
    app.use('/user/:id', function (req, res, next) {
      console.log('Request Type:', req.method);
      next();
    });
    
    //此示例显示一个路由及其处理程序函数(中间件系统)。此函数处理针对 /user/:id 路径的 GET 请求
    app.get('/user/:id', function (req, res, next) {
      res.send('USER');
    });
    
    //在安装点使用安装路径装入一系列中间件函数的示例。 它演示一个中间件子堆栈,用于显示针对 /user/:id 路径的任何类型 HTTP 请求的信息
    app.use('/user/:id', function(req, res, next) {
      console.log('Request URL:', req.originalUrl);
      next();
    }, function (req, res, next) {
      console.log('Request Type:', req.method);
      next();
    });
    

    要跳过路由器中间件堆栈中剩余的中间件函数,请调用 next('route') 将控制权传递给下一个路由。
    注:next('route') 仅在使用 app.METHOD() 或 router.METHOD() 函数装入的中间件函数中有效

    1.2路由器层中间件

    路由器中间件的工作方式与应用层中间件类似,差异之处在于它绑定到express.Router()的实例上。

    var router = express.Router()
    

    使用 router.use() 和 router.METHOD() 函数装入路由器层中间件

    var app = express();
    var router = express.Router();
    
    router.use(function (req, res, next) {
      console.log('Time:', Date.now());
      next();
    });
    
    router.use('/user/:id', function(req, res, next) {
      console.log('Request URL:', req.originalUrl);
      next();
    }, function (req, res, next) {
      console.log('Request Type:', req.method);
      next();
    });
    
    router.get('/user/:id', function (req, res, next) {
      if (req.params.id == 0) next('route');
      else next(); 
    }, function (req, res, next) {
      res.render('regular');
    });
    
    router.get('/user/:id', function (req, res, next) {
      console.log(req.params.id);
      res.render('special');
    });
    
    app.use('/', router);
    
    

    1.3错误处理中间件

    错误处理中间件始终采用4个自变量。必须提供4个自变量,以将函数标识为错误处理中间件。即使无需使用 next 对象,也必须指定该对象以保持特征符的有效性。否则,next 对象将被解释为常规中间件,从而无法处理错误

    app.use(function(err, req, res, next) {
      console.error(err.stack);
      res.status(500).send('Something broke!');
    });
    

    1.4内置中间件

    自 V4.x 起,Express 不再依赖于 Connect。除 express.static 外,先前 Express 随附的所有中间件函数现在以单独模块的形式提供。

    1.5第三方中间件

    使用第三方中间件向Express应用程序添加功能。安装具有所需功能的 Node.js 模块,然后在应用层或路由器层的应用程序中将其加装入。

    //安装cookie-parser
    npm i cookie-parser 
    
    var express = require('express')
    var app = express();
    var cookieParser = require('cookie-parser');
    app.use(cookieParser());
    
  • 相关阅读:
    [ios] 分辨率
    [bat] 图片裁剪工具ImageMagick
    [ASP.NET] 调用32位ORACLE错误
    [Linux] 开启ESX的SSH
    [Linux] 关机和重启命令
    [.net] 关于CS0016: Could not write to output file ‘c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files… ‘Access is denied.’ 的解决办法
    [linux] XEN里面的虚拟机centos无法使用date s设置时间
    字符串替换,string的强大
    C语言学习笔记(1)
    C语言学习笔记(8)
  • 原文地址:https://www.cnblogs.com/sminocence/p/10364945.html
Copyright © 2011-2022 走看看