我正在http://nodejs.org/docs/v0.4.0/api/http.html#http.request上阅读文档,但由于某种原因,我似乎无法在返回的已完成响应对象上找到body/data属性。
> var res = http.get({host:'www.somesite.com', path:'/'})
> res.finished
true
> res._hasBody
true
它完成了(http。Get为您完成这一工作),因此它应该有某种内容。但没有尸体,没有数据,我无法从中读取信息。尸体藏在哪里?
只是一个改进版的nkron响应。
const httpGet = url => {
return new Promise((resolve, reject) => {
http.get(url, res => {
res.setEncoding('utf8');
const body = [];
res.on('data', chunk => body.push(chunk));
res.on('end', () => resolve(body.join('')));
}).on('error', reject);
});
};
在字符串[]中添加块对内存使用更好,join(")将分配
新的内存只有一次。
一份咖啡:
# My little helper
read_buffer = (buffer, callback) ->
data = ''
buffer.on 'readable', -> data += buffer.read().toString()
buffer.on 'end', -> callback data
# So request looks like
http.get 'http://i.want.some/stuff', (res) ->
read_buffer res, (response) ->
# Do some things with your response
# but don't do that exactly :D
eval(CoffeeScript.compile response, bare: true)
和编译
var read_buffer;
read_buffer = function(buffer, callback) {
var data;
data = '';
buffer.on('readable', function() {
return data += buffer.read().toString();
});
return buffer.on('end', function() {
return callback(data);
});
};
http.get('http://i.want.some/stuff', function(res) {
return read_buffer(res, function(response) {
return eval(CoffeeScript.compile(response, {
bare: true
}));
});
});