这个中间件是模仿body-parser写的,旨在明白中间件是什么以及如何工作的.
当我们解析POST数据的时候,需要有body-parser作为中间的一步,这样我们才可以顺利的拿到req.body的数据.
const express=require('express');
const bodyParser=require('body-parser');
var server=express();
server.listen(3000);
//POST数据的解析需要有中间件先解析一层
//body.urlencoded会给req加上一个body属性
//req.body本来就是不存在的
//加上之后后面才可以正常输出
server.use(bodyParser.urlencoded({}));
server.use('/', function(req,res){
console.log(req.body);//输出{ user: 'ccs', pass: '123' }
});
要实现这样的效果,我们需要新建一个中间件文件,取名为
my-body-parser.js
const querystring=require('querystring');
//将一整个模块输出供别人使用
module.exports=function(req,res,next){
var str='';
req.on('data',function(data){
str+=data;
});
req.on('end',function(){
req.body=querystring.parse(str);
next();
});
}
然后我们来使用这个中间件
const express=require('express');
//这个路径需要注意
const myBodyParser=require('./libs/my-body-parser.js');
var server=express();
server.listen(3000);
server.use(myBodyParser);
server.use('/',function(req,res){
console.log(req.body);
});
最后是我们的html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form action="http://localhost:3000" method="post">
username <input type="text" name="user" value=""><br>
password <input type="password" name="pass" value=""><br>
<input type="submit" value="send">
</form>
</body>
</html>
最后测试通过,顺利输出json
{ user: 'ac', pass: 'dcvv' }
网友评论