Comparing version 5.1.0 to 5.2.0
@@ -219,5 +219,3 @@ | ||
if (err || | ||
!options.json) { | ||
if (err || !options.json) { | ||
return callback(err, buffer); | ||
@@ -228,2 +226,14 @@ } | ||
var result; | ||
if (buffer.length === 0) { | ||
return callback(null, null); | ||
} | ||
if (options.json === 'force') { | ||
result = internals.tryParseBuffer(buffer); | ||
return callback(result.err, result.json); | ||
} | ||
// mode is "smart" or true | ||
var contentType = (res.headers && res.headers['content-type']) || ''; | ||
@@ -236,14 +246,4 @@ var mime = contentType.split(';')[0].trim().toLowerCase(); | ||
if (buffer.length === 0) { | ||
return callback(null, null); | ||
} | ||
try { | ||
var json = JSON.parse(buffer.toString()); | ||
} | ||
catch (err) { | ||
return callback(err, null); | ||
} | ||
return callback(null, json); | ||
result = internals.tryParseBuffer(buffer); | ||
return callback(result.err, result.json); | ||
}; | ||
@@ -391,1 +391,18 @@ | ||
}; | ||
internals.tryParseBuffer = function (buffer) { | ||
var result = { | ||
json: null, | ||
err: null | ||
}; | ||
try { | ||
var json = JSON.parse(buffer.toString()); | ||
result.json = json; | ||
} | ||
catch (err) { | ||
result.err = err; | ||
} | ||
return result; | ||
}; |
{ | ||
"name": "wreck", | ||
"description": "HTTP Client Utilities", | ||
"version": "5.1.0", | ||
"version": "5.2.0", | ||
"repository": "git://github.com/hapijs/wreck", | ||
@@ -6,0 +6,0 @@ "main": "index", |
@@ -88,4 +88,5 @@ ![wreck Logo](https://raw.github.com/hapijs/wreck/master/images/wreck.png) | ||
aborting handling of the response. Defaults to unlimited. | ||
- `json` - A flag indicating whether the payload should be parsed as JSON | ||
if the response indicates a JSON content-type. | ||
- `json` - A value indicating how to try to parse the payload as JSON. Defaults to `undefined` meaning no parse logic. | ||
- `true`, 'smart' - only try `JSON.parse` if the response indicates a JSON content-type. | ||
- `force` - try `JSON.parse` regardless of the content-type header. | ||
- `maxBytes` - The maximum allowed response payload size. Defaults to unlimited. | ||
@@ -92,0 +93,0 @@ - `callback` - The callback function using the signature `function (err, payload)` where: |
@@ -1390,3 +1390,3 @@ // Load modules | ||
var options = { | ||
json: true | ||
json: 'SMART' | ||
}; | ||
@@ -1404,2 +1404,55 @@ | ||
}); | ||
it('will try to parse json in "force" mode, regardless of the header', function (done) { | ||
var server = Http.createServer(function (req, res) { | ||
res.writeHead(200, { 'Content-Type': 'text/plain' }); | ||
res.end(JSON.stringify({ foo: 'bar' })); | ||
}); | ||
server.listen(0, function () { | ||
var port = server.address().port; | ||
var options = { | ||
json: 'force' | ||
}; | ||
Wreck.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).to.deep.equal({ | ||
foo: 'bar' | ||
}); | ||
server.close(); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
it('will error on invalid json received in "force" mode', function (done) { | ||
var server = Http.createServer(function (req, res) { | ||
res.writeHead(200, { 'Content-Type': 'text/plain' }); | ||
res.end('ok'); | ||
}); | ||
server.listen(0, function () { | ||
var port = server.address().port; | ||
var options = { | ||
json: 'force' | ||
}; | ||
Wreck.get('http://localhost:' + port, options, function (err, res, payload) { | ||
expect(err).to.exist(); | ||
server.close(); | ||
done(); | ||
}); | ||
}); | ||
}); | ||
}); | ||
@@ -1406,0 +1459,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
104187
1407
198