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、还有就是链式操作的联合操作。

posted @ 2018-06-01 19:34  寻觅beyond  阅读(561)  评论(0编辑  收藏  举报
返回顶部