-beyond

中间件

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

分类:

技术点:

相关文章:

  • 2022-01-18
  • 2021-09-07
  • 2022-02-10
  • 2021-02-07
  • 2021-12-27
  • 2021-11-27
  • 2020-06-17
  • 2021-11-16
猜你喜欢
  • 2021-08-15
  • 2021-04-30
  • 2021-11-10
  • 2021-05-28
  • 2022-03-01
  • 2021-06-24
  • 2021-11-27
相关资源
相似解决方案