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、还有就是链式操作的联合操作。
如需转载,请注明文章出处,谢谢!!!
浙公网安备 33010602011771号