先给大家解释下什么是中间件?
中间件:用来处理(过滤)请求,最终为路由提供服务
中间件分为四种类型:
:应用级中间件(自定义)
:路由级中间件
:内置中间件
:第三方中间件
我们先来解决post请求,就是引入一个第三方中间件:body-parser
//引入中间件模块 const bodyParser=reuqire('body-parser'); //使用body-parser中间件,将post请求的数据解析为对象 app.use(bodyParser.urlencoded({ //不使用扩展的查询字符串模块qs,而是使用官方提供的querystring模块解析为对象 extend:false })); //在路由中获取post请求数据 req.body;
练习:创建服务器,托管静态资源到public目录,创建文件login.html,点击提交,向服务器发送post请求,请求的url:/mylogin,在路由中获取post请求的数据
const express=require('express'); const bodyParser=require('body-parser'); var app=express(); app.listen(8080); /*这是不使用body-parser中间件来获取数据的方法 const querystring=require('querystring'); app.post('/mylogin',function(req,res){ req.on('data',function(chunk){ var str=chunk.toString(); var obj=querystring.parse(str); res.send(obj); }); });*/ //使用body-parser中间件,获取post请求的数据,并解析为对象 app.use(bodyParser.urlencoded({ extended:false })); app.post('/mylogin',function(req,res){ console.log(req.body); res.send(`登录成功,用户名:${req.body.uname} 密码:${req.body.upwd}`); }); app.use(express.static('./public'));//login.html文件保管到public文件夹中
app.use(url,function(req,res,next){});
url 表示中间件要给哪一个路由的url使用,对应路由的url
在中间件中可以拦截到请求,也可以做出响应;
next是一个函数,表示要执行下一个中间件或者路由
例子:创建一个路由,方法get url:/shopping; 传递商品的价格price,要求在中间件中将商品的价格加100,最后响应商品价格为:
app.use('/shoping',function(req,res,next){ req.query.price=Number(req.query.price); req.query.price+=100; next(); }); app.get('/shopping',function(req,res){ res.send('价格:'+ req.query.price); });
express当前只有一个内置中间件。
把所有的静态资源托管到指定目录下,如果浏览器请求文件,自动到该目录下查找,不需要创建路由来响应文件。
app.user(express.static('目录'));
路由器的使用,具体可以参照上一节内容。