Node 自定义中间件
中间件
const express = require("express"); const bodyParser = require("body-parser"); var server = express(); server.use(bodyParser.urlencoded({ extended:false, limit:2*1024*1024 })); server.use("/",function(request,response){ console.log(request.body);//打印post方式传递的参数 {name:"abc",age:50} }); server.listen(8080);
上面代码中的bodyParser模块就是一个中间件,
如果没有第6行的bodyParser.urlencoded(),在第12行输出request.body时,输出的就是undefined;
但是如果有bodyParser.urlencoded()之后,就可以在第12行接收到post传递的参数了。
这样对比,就可以知道bodyParser模块做了什么。
他做的就是将使用post方式传递的数据保存到request.body对象。
自定义中间件
其实我们可以自己使用http的on("data",func),on("end",func)来处理post参数,比如下面这样:
const express = require("express"); const querystring = require("querystring"); var server = express(); server.use(function(request,response,next){ var str = ""; request.on("data",function(tmp){ str += tmp; }); request.on("end",function(){ request.body = querystring.parse(str); next(); }) }); server.use("/",function(request,response){ console.log(request.body);//打印post方式传递的参数 //接收到的同样是{name:"abc",age:50} }); server.listen(8080);
可以将自定义的那个中间件的func保存到一个my-parse.js中,比如下面的例子:
my-parser.js
const querystring = require("querystring"); exports.urlencoded = function(){ return function(request,response,next){ var str = ""; request.on("data",function(tmp){ str += tmp; }); request.on("end",function(){ request.body = querystring.parse(str); next(); }) } }
server.js
const express = require("express"); const myParser = require("./my-parser") var server = express(); server.use(myParser.urlencoded());//使用自定义的中间件处理post数据 server.use("/",function(request,response){ console.log(request.body);//打印post方式传递的参数 }); server.listen(8080);
其实中间件的重点就是require、exports、module、还有就是链式操作的联合操作。
如需转载,请注明文章出处,谢谢!!!