nodejs接收post数据时,在request监听data事件时回调函数的参数(chunk)是buffer,但是用+连接后怎么会成为字符串?
//main.js
http.createServer(function(req,res){
if(req.method=='POST'){
var all = ''
req.on('data',function(chunk){
console.log(chunk)
all+=chunk
console.log('all:',all)
})
req.on('end',function(){
res.end(all.toUpperCase())
})
}else{
res.end()
}
}).listen(port)
我使用 curl -d "user=Summer&passwd=12345678" "http://127.0.0.1:3000" 进行模拟请求时,命令行结果如下
<Buffer 75 73 65 72 3d 53 75 6d 6d 65 72 26 70 61 73 73 77 64 3d 31 32 33 34 35
36 37 38>
all: user=Summer&passwd=12345678
req在监听data事件时,获取到的chunk是Buffer实例,但是由于你调用了
all += chunk
,这里其实隐藏了toString()的转换,因为在拼接字符串时程序会尝试着调用toString()来将两个数据合理化,其实all += chunk
可以看成是all += chunk.toString()
的写法。具体看我下面的代码:
Buffer实例,也可以类似看成是String实例,它也具有遍历方法,比如forEach():
可能有人会对上面字符的转化存在疑问,为什么H的表示形式中的
Buffer的48
转换成十进制的72
了,这是因为Buffer中的字符是十六进制编码的,8 + 64 = 72
,合理。