Comparing version
@@ -214,3 +214,25 @@ | ||
return callback(err, buffer); | ||
if (err || | ||
!options.json) { | ||
return callback(err, buffer); | ||
} | ||
// Parse JSON | ||
var contentType = (res.headers && res.headers['content-type']) || ''; | ||
var mime = contentType.split(';')[0].trim().toLowerCase(); | ||
if (mime !== 'application/json') { | ||
return callback(null, buffer); | ||
} | ||
try { | ||
var json = JSON.parse(buffer.toString()); | ||
} | ||
catch (err) { | ||
return callback(err, null); | ||
} | ||
return callback(null, json); | ||
}; | ||
@@ -368,5 +390,9 @@ | ||
exports.read(res, function (err, payload) { | ||
exports.read(res, options, function (err, payload) { | ||
return callback(err, res, payload.toString()); | ||
if (payload instanceof Buffer) { | ||
payload = payload.toString(); | ||
} | ||
return callback(err, res, payload); | ||
}); | ||
@@ -373,0 +399,0 @@ }); |
{ | ||
"name": "nipple", | ||
"description": "HTTP Client Utilities", | ||
"version": "2.3.0", | ||
"version": "2.4.0", | ||
"repository": "git://github.com/spumko/nipple", | ||
@@ -6,0 +6,0 @@ "main": "index", |
@@ -820,2 +820,118 @@ // Load modules | ||
}); | ||
describe('json', function () { | ||
it('json requested and received', function (done) { | ||
var server = Http.createServer(function (req, res) { | ||
res.writeHead(200, { | ||
'Content-Type': 'application/json' | ||
}); | ||
res.end(JSON.stringify({ | ||
foo: 'bar' | ||
})); | ||
}); | ||
server.listen(0, function () { | ||
var port = server.address().port; | ||
var options = { | ||
json: true | ||
}; | ||
Nipple.get('http://localhost:' + port, options, function (err, res, payload) { | ||
expect(err).to.not.exist; | ||
expect(res.statusCode).to.equal(200); | ||
expect(payload).to.not.equal(null); | ||
expect(payload.foo).to.exist; | ||
server.close(); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
it('json requested but not received - flag is ignored', function (done) { | ||
var server = Http.createServer(function (req, res) { | ||
res.writeHead(200); | ||
res.end('ok'); | ||
}); | ||
server.listen(0, function () { | ||
var port = server.address().port; | ||
var options = { | ||
json: true | ||
}; | ||
Nipple.get('http://localhost:' + port, options, function (err, res, payload) { | ||
expect(err).to.not.exist; | ||
expect(res.statusCode).to.equal(200); | ||
expect(payload).to.not.equal(null); | ||
server.close(); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
it('invalid json received', function (done) { | ||
var server = Http.createServer(function (req, res) { | ||
res.writeHead(200, { | ||
'Content-Type': 'application/json' | ||
}); | ||
res.end('ok'); | ||
}); | ||
server.listen(0, function () { | ||
var port = server.address().port; | ||
var options = { | ||
json: true | ||
}; | ||
Nipple.get('http://localhost:' + port, options, function (err, res, payload) { | ||
expect(err).to.exist; | ||
server.close(); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
it('json not requested but received as string', function (done) { | ||
var server = Http.createServer(function (req, res) { | ||
res.writeHead(200, { | ||
'Content-Type': 'application/json' | ||
}); | ||
res.end(JSON.stringify({ | ||
foo: 'bar' | ||
})); | ||
}); | ||
server.listen(0, function () { | ||
var port = server.address().port; | ||
var options = { | ||
json: false | ||
}; | ||
Nipple.get('http://localhost:' + port, options, function (err, res, payload) { | ||
expect(err).to.not.exist; | ||
expect(res.statusCode).to.equal(200); | ||
expect(payload).to.not.equal(null); | ||
server.close(); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
}); | ||
}); |
89897
4.71%925
12.94%