parsePostBody(req, (body) => {
res.end(`Your nick is ${body}`)
});
});
server.listen(3000);
三、处理不同压缩类型
这里举个
gzip压缩的例子。客户端代码如下,要点如下:1.压缩类型声明:Content-Encoding赋值为gzip。
2.请求体压缩:通过zlib模块对请求体进行gzip压缩。
var http = require('http');
var zlib = require('zlib');var options = {
hostname: '127.0.0.1',
port: '3000',
path: '/test',
method: 'POST',
headers: {
'Content-Type': 'text/plain',
'Content-Encoding': 'gzip'
}
};
var client = http.request(options, (res) => {
res.pipe(process.stdout);
});
// 注意:将 Content-Encoding 设置为 gzip 的同时,发送给服务端的数据也应该先进行gzip
var buff = zlib.gzipSync('chyingp');
client.end(buff);
服务端代码如下,这里通过
zlib模块,对请求体进行了解压缩操作(guzip)。
var http = require('http');
var zlib = require('zlib');var parsePostBody = function (req, done) {
var length = req.headers['content-length'] - 0;
var contentEncoding = req.headers['content-encoding'];
var stream = req;
// 关键代码如下
if(contentEncoding === 'gzip') {
stream = zlib.createGunzip();
req.pipe(stream);
}
var arr = [];
var chunks;
stream.on('data', buff => {
arr.push(buff);
});
stream.on('end', () => {
chunks = Buffer.concat(arr);
done(chunks);
});
stream.on('error', error => console.error(error.message));
};
var server = http.createServer(function (req, res) {
parsePostBody(req, (chunks) => {
var body = chunks.toString();
res.end(`Your nick is ${body}`)
});
});
server.listen(3000);
写在后面
body-parser的核心实现并不复杂,翻看源码后你会发现,更多的代码是在处理异常跟边界。另外,对于POST请求,还有一个非常常见的
Content-Type是
multipart/form-data,这个的处理相对复杂些,
body-parser不打算对其进行支持。篇幅有限,后续章节再继续展开。









