我正在研究设置简单节点服务器的代码here。我已经看过并多次使用过这种在数组中保存数据块并最终将它们连接在一起的习惯用法。
http.createServer(function(request, response) {
var body = [];
request.on('data', function(chunk) { body.push(chunk); });
request.on('end', function() { body = Buffer.concat(body).toString();
...
chunk
的类型是什么? Documentation表示它是Buffer
或string
,但是哪一个?
调用Buffer.concat(body)
是否可以安全地body
是一个字符串数组? Documentation of Buffer.concat(list)
说list
应该是一个列表缓冲区实例。字符串是“缓冲区实例”吗?
答案 0 :(得分:2)
同样的文件还指出:
如果使用
readable.setEncoding()
方法为流指定了默认编码,则侦听器回调将作为字符串传递数据块;否则数据将作为Buffer
传递。
由于您的代码没有调用setEncoding
,chunk
将成为缓冲区。
调用
Buffer.concat(body)
body
是一个字符串数组是否安全?
> Buffer.concat(['foo', 'bar', 'xxx'])
TypeError: "list" argument must be an Array of Buffers
所以没有。但由于body
将是一个缓冲区数组,Buffer.concat(body)
应该可以正常工作。