Browse Source

http.cat no longer uses Promise

v0.7.4-release
Ryan Dahl 15 years ago
parent
commit
d0f2d465aa
  1. 46
      lib/http.js
  2. 8
      src/node.js
  3. 10
      test/mjsunit/test-http-cat.js
  4. 8
      test/mjsunit/test-http-chunked.js

46
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 = {},
encoding = encoding || "utf8"; callback = null;
// 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;
}; };

8
src/node.js

@ -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 {

10
test/mjsunit/test-http-cat.js

@ -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 () {

8
test/mjsunit/test-http-chunked.js

@ -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…
Cancel
Save