http.cat no longer uses Promise
This commit is contained in:
parent
ef55324f1a
commit
d0f2d465aa
44
lib/http.js
44
lib/http.js
@ -552,22 +552,40 @@ process.http.Client.prototype.request = function (method, url, headers) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
exports.cat = function (url, encoding, headers) {
|
exports.cat = function (url, encoding_, headers_) {
|
||||||
var promise = new events.Promise();
|
var encoding = 'utf8',
|
||||||
|
headers = {},
|
||||||
|
callback = null;
|
||||||
|
|
||||||
encoding = encoding || "utf8";
|
// parse the arguments for the various options... very ugly
|
||||||
|
if (typeof(arguments[1]) == 'string') {
|
||||||
|
encoding = arguments[1];
|
||||||
|
if (typeof(arguments[2]) == 'object') {
|
||||||
|
headers = arguments[2];
|
||||||
|
if (typeof(arguments[3]) == 'function') callback = arguments[3];
|
||||||
|
} else {
|
||||||
|
if (typeof(arguments[2]) == 'function') callback = arguments[2];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// didn't specify encoding
|
||||||
|
if (typeof(arguments[1]) == 'object') {
|
||||||
|
headers = arguments[1];
|
||||||
|
callback = arguments[2];
|
||||||
|
} else {
|
||||||
|
callback = arguments[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var url = require("url").parse(url);
|
var url = require("url").parse(url);
|
||||||
headers = headers || {};
|
|
||||||
|
|
||||||
var hasHost = false;
|
var hasHost = false;
|
||||||
for (var i in headers) if (i.toLowerCase() === "host") {
|
for (var i in headers) {
|
||||||
|
if (i.toLowerCase() === "host") {
|
||||||
hasHost = true;
|
hasHost = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!hasHost) {
|
|
||||||
headers["Host"] = url.hostname;
|
|
||||||
}
|
}
|
||||||
|
if (!hasHost) headers["Host"] = url.hostname;
|
||||||
|
|
||||||
var content = "";
|
var content = "";
|
||||||
|
|
||||||
@ -576,21 +594,21 @@ exports.cat = function (url, encoding, headers) {
|
|||||||
|
|
||||||
req.addListener('response', function (res) {
|
req.addListener('response', function (res) {
|
||||||
if (res.statusCode < 200 || res.statusCode >= 300) {
|
if (res.statusCode < 200 || res.statusCode >= 300) {
|
||||||
promise.emitError(res.statusCode);
|
if (callback) callback(res.statusCode);
|
||||||
|
client.close();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
res.setBodyEncoding(encoding);
|
res.setBodyEncoding(encoding);
|
||||||
res.addListener('data', function (chunk) { content += chunk; });
|
res.addListener('data', function (chunk) { content += chunk; });
|
||||||
res.addListener('end', function () {
|
res.addListener('end', function () {
|
||||||
promise.emitSuccess(content);
|
if (callback) callback(null, content);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
client.addListener("error", function () {
|
client.addListener("error", function (err) {
|
||||||
promise.emitError();
|
// todo an error should actually be passed here...
|
||||||
|
if (callback) callback(new Error('Connection error'));
|
||||||
});
|
});
|
||||||
|
|
||||||
req.close();
|
req.close();
|
||||||
|
|
||||||
return promise;
|
|
||||||
};
|
};
|
||||||
|
@ -976,13 +976,7 @@ function cat (id, callback) {
|
|||||||
if (err) {
|
if (err) {
|
||||||
if (callback) callback(err);
|
if (callback) callback(err);
|
||||||
} else {
|
} else {
|
||||||
http.cat(id)
|
http.cat(id, callback);
|
||||||
.addCallback(function(content) {
|
|
||||||
if (callback) callback(null, content);
|
|
||||||
})
|
|
||||||
.addErrback(function(err) {
|
|
||||||
if (callback) callback(err);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -17,16 +17,22 @@ server.listen(PORT);
|
|||||||
var got_good_server_content = false;
|
var got_good_server_content = false;
|
||||||
var bad_server_got_error = false;
|
var bad_server_got_error = false;
|
||||||
|
|
||||||
http.cat("http://localhost:"+PORT+"/", "utf8").addCallback(function (content) {
|
http.cat("http://localhost:"+PORT+"/", "utf8", function (err, content) {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
} else {
|
||||||
puts("got response");
|
puts("got response");
|
||||||
got_good_server_content = true;
|
got_good_server_content = true;
|
||||||
assert.equal(body, content);
|
assert.equal(body, content);
|
||||||
server.close();
|
server.close();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
http.cat("http://localhost:12312/", "utf8").addErrback(function () {
|
http.cat("http://localhost:12312/", "utf8", function (err, content) {
|
||||||
|
if (err) {
|
||||||
puts("got error (this should happen)");
|
puts("got error (this should happen)");
|
||||||
bad_server_got_error = true;
|
bad_server_got_error = true;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
process.addListener("exit", function () {
|
process.addListener("exit", function () {
|
||||||
|
@ -11,12 +11,8 @@ var server = http.createServer(function(req, res) {
|
|||||||
});
|
});
|
||||||
server.listen(PORT);
|
server.listen(PORT);
|
||||||
|
|
||||||
http.cat("http://localhost:"+PORT+"/", "utf8")
|
http.cat("http://localhost:"+PORT+"/", "utf8", function (err, data) {
|
||||||
.addCallback(function (data) {
|
if (err) throw err;
|
||||||
assert.equal(UTF8_STRING, data);
|
assert.equal(UTF8_STRING, data);
|
||||||
server.close();
|
server.close();
|
||||||
})
|
})
|
||||||
.addErrback(function() {
|
|
||||||
assert.ok(false, 'http.cat should succeed in < 1000ms');
|
|
||||||
})
|
|
||||||
.timeout(1000);
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user