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模块。

 

 

原文地址:https://www.cnblogs.com/loaderman/p/11506105.html