美文网首页
Node.js学习——Express使用中间件

Node.js学习——Express使用中间件

作者: wxyzcctn | 来源:发表于2022-01-26 17:20 被阅读0次

    中间件:就是匹配路由之前和匹配路由之后做的一系列的操作。
    中间件可以用来做权限判断:没有登录跳转到登录页面,登录以后就显示登录以后的页面。
    Express 应用可使用如下几种中间件:应用级中间件、路由级中间件(用的比较少)、错误处理中间件、内置中间件、第三方中间件。
    中间件,除了能够访问请求对象req和响应对象res,还有一个next参数。
    next()将控制权交给下一个中间件,调用下一个函数。
    如果没有next()的话,就不再调用下一个函数了。
    如果当前的中间件没有调用next(),也没有结束请求-响应的周期,请求将会被挂起。

    const express = require('express');
    const app = express();
    
    // 内置中间件
    /* 
        从版本4.x开始,Express不再依赖Content,也就是说Express以前的内置中间件作为单独模块,express.static是Express的唯一内置中间件。
        
        express.static(root, [options]); 
        
        通过express.static我们可以指定要加载的静态资源。root代表加载静态资源的路径,options作为可选参数拥有以下属性:
            dotfiles    是否对外输出文件名以点(.)开头的文件。有效值包括“allow”、“deny”和“ignore”
            etag    启用或禁用 etag 生成
            extensions  用于设置后备文件扩展名
            index   发送目录索引文件。设置为 false 可禁用建立目录索引
            lastModified    将 Last-Modified 的头设置为操作系统上该文件的上次修改日期。有效值包括 true 或 false
            maxAge  设置 Cache-Control 头的 max-age 属性(以毫秒或者 ms 格式中的字符串为单位)
            redirect    当路径名是目录时重定向到结尾的“/”
            setHeaders  用于设置随文件一起提供的 HTTP 头的函数
     */
    var options = {
      dotfiles: 'ignore',
      etag: false,
      extensions: ['htm', 'html'],
      index: false,
      maxAge: '1d',
      redirect: false,
      setHeaders: function (res, path, stat) {
        res.set('x-timestamp', Date.now());
      }
    }
    // app.use(express.static('static'), options)
    app.use(express.static('static'))
    
    //1、应用级中间件 (自定义一个获取时间戳的中间件)
    function getTimestamp(req, res, next) {
        let t1 = Date.parse(new Date());
        let t2 = (new Date()).valueOf();
        let t3 = new Date().getTime();
        console.log(t1, t2, t3);
        next();
    }
    // 使用中间件
    app.use(getTimestamp);
    
    app.get('/',(req,res)=>{
        res.send('首页')
    })
    
    app.get('/login',(req,res)=>{
        res.send('登录页')
    })
    //2、路由级中间件(用的比较少)
    app.get('/news/add',(req,res,next)=>{
        console.log('执行新增新闻');
        next()
    })
    
    app.get('/news/:id',(req,res)=>{
        var id = req.params['id'];
        res.send('动态路由'+id)
    })
    //3、错误处理中间件  /css/base.css
    // 即使不需要next参数,也必须要声明,否则会被识别为普通中间件,不能处理错误
    // 错误中间件需要放在所有中间件、路由函数的后面才可以生效
    app.use((req,res,next)=>{
        res.status(404).send('404')
    })
    
    app.listen(3000)
    

    第三方中间件

    const express = require('express');
    const bodyParser = require('body-parser')
    const ejs = require('ejs')
    const app = express();
    
    app.engine('html', ejs.__express);
    app.set('view engine','html');
    // 配置第三方中间件
    app.use(bodyParser.urlencoded({ extended: false }))
    app.use(bodyParser.json())
    
    app.get('/login',(req,res)=>{ 
        // req.query 获取get传值
        res.render('index',{})
    })
    
    app.post('/doLogin',(req,res)=>{
        // req.body 获取post参数
        var body = req.body;
        console.log(body);
        res.send('获取传值'+body.username)
    })
    
    app.listen(3000)
    

    说明
    使用第三方中间件时一般在npm官网上找相关的配置
    使用Express获取get传值一般使用的是req.query
    使用Express获取post参数时一般通过第三方中间件body-parser,获取传值一般使用req.body

    相关文章

      网友评论

          本文标题:Node.js学习——Express使用中间件

          本文链接:https://www.haomeiwen.com/subject/kmotfrtx.html