• Express中间件


    Express 是一个自身功能极简,完全是由路由和中间件构成一个的 web 开发框架:

    本质上来说,一个 Express 应用就是在调用各种中间件。

    中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响 应对象(response object (res)), 和 web 应用中处理请求-响应循环流程中的中间件,一般 被命名为 next 的变量。

    中间件的功能包括 :

    • 执行任何代码。
    • 修改请求和响应对象。
    • 终结请求-响应循环。
    • 调用堆栈中的下一个中间件。

    如果 get、post 回调函数中,没有 next 参数,那么就匹配上第一个路由,就不会往下匹 配了。如果想往下匹配的话,那么需要写 next()

    Express 应用可使用如下几种中间件:

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

    应用级中间件

    /**
        中间件:就是匹配路由之前和匹配路由之后做的一系列的操作
        //权限判断 :没有登录 跳转到登录页面,登录以后就显示登录以后的页面
     */
    var express=require('express'); /*引入*/
    var app=new express();  /*实例化*/
    /*
    
    中间件 表示匹配任何路由
    
    应用级中间件
    
    next()   路由继续向下匹配
    * */
    app.use(function(req,res,next){
        console.log(new Date());
        next();
    })
    
    
    app.use('/news',function(req,res,next){
        console.log('新闻路由中间件通过app.use');
        next();
    })
    
    app.get('/',function(req,res){
    
        res.send('你好express');
    })
    
    app.get('/news',function(req,res){
    
        res.send('新闻路由');
    })
    
    
    app.listen(3000,'127.0.0.1');

    路由中间件

    /**
    路由中间件
     */
    
    
    var express=require('express'); /*引入*/
    
    var app=new express();  /*实例化*/
    
    
    app.get('/',function(req,res){
    
        res.send('你好express');
    })
    
    
    app.get('/news',function(req,res,next){
    
       console.log('这是路由中间件');
    
        next();
    })
    
    
    app.get('/news',function(req,res){
    
        res.send('这是路由中间件news');
    })
    app.listen(3000,'127.0.0.1');

    错误处理中间件

    /**
     * Created by Administrator on 2017/8/5 0005.
     */
    
    
    var express=require('express'); /*引入*/
    
    var app=new express();  /*实例化*/
    
    
    app.get('/',function(req,res){
    
        res.send('你好express');
    })
    
    
    
    app.get('/news',function(req,res){
    
        res.send('你好express news');
    })
    
    /*匹配所有的路由  404*/
    app.use(function(req,res){
    
        res.status(404).send('这是404 表示路由没有匹配到')
    
    })
    
    app.listen(3000,'127.0.0.1');

    内置中间件

     

    /**
     * Created by Administrator on 2017/8/5 0005.
     */
    
    
    var express=require('express'); /*引入*/
    
    var app=new express();  /*实例化*/
    
    //内置中间件  托管静态页面
    //http://127.0.0.1:3000/css/style.css
    
    //   css/style.css
    
    app.use(express.static('public'));
    
    //http://127.0.0.1:3000/static/css/style.css
    
    //   css/style.css
    
    app.use('/static',express.static('public'));
    
    
    app.get('/',function(req,res){
    
        res.send('你好express');
    })
    
    
    app.listen(3000,'127.0.0.1');

     

    第三方中间件

    /**
    
     body-parser 中间件 第三方的 获取 post 提交的数据   (模块)
     1.cnpm install body-parser --save
    
     2.var bodyParser = require('body-parser')
     3.设置中间件
    // parse application/x-www-form-urlencoded
     app.use(bodyParser.urlencoded({ extended: false }))
    // parse application/json
     app.use(bodyParser.json())
    
     4.req.body 获取数据
    
     */
    
    var express=require('express'); /*引入*/
    
    var bodyParser = require('body-parser');
    
    var app=new express();  /*实例化*/
    
    //配置body-parser中间件
    // parse application/x-www-form-urlencoded
    app.use(bodyParser.urlencoded({ extended: false }))
    // parse application/json
    app.use(bodyParser.json());
    
    //ejs
    app.set('view engine','ejs');
    
    
    app.get('/',function(req,res){
    
        res.send('你好express');
    })
    app.get('/login',function(req,res){
      res.render('login');
    })
    
    app.post('/doLogin',function(req,res){
    
      console.log(req.body);   /*获取post提交的数据*/
    
    })
    
    app.listen(3002,'127.0.0.1');

     


    GET 请求的参数在 URL 中,在原生 Node 中,需要使用 url 模块来识别参数字符串。在Express 中,url req.query POST 请求在 express 中不能直接获得,可以使用 模块。使用后,将可以用

    得到参数。但是如果表单中含有文件上传,那么还是需要使用formidable模块。

     

     

  • 相关阅读:
    Leetcode86.分隔链表
    Leetcode39.组合总和
    Leetcode31.下一个排列
    剑指Offer35.复杂链表复制
    剑指Offer14-I.剪绳子
    剑指Offer38.字符串的排序
    Leetcode29.两数相除
    232. Implement Queue using Stacks
    程序员跳槽指南
    226. Invert Binary Tree
  • 原文地址:https://www.cnblogs.com/loaderman/p/11506105.html
Copyright © 2020-2023  润新知