in lib/nano.js [121:226]
const responseHandler = function (response, req, opts, resolve, reject, callback) {
const statusCode = response.status || (response.response && response.response.status) || 500
if (response.isAxiosError && response.response) {
response = response.response
}
let body = response.data
response.statusCode = statusCode
// cookie parsing
if (response.headers) {
const h = response.headers['set-cookie']
if (h && h.length) {
h.forEach((header) => {
cfg.cookieJar.parse(header, req.url)
})
}
}
// let parsed
const responseHeaders = Object.assign({
uri: scrubURL(req.url),
statusCode
}, response.headers)
if (!response.status) {
if (axios.isCancel(response)) {
if (resolve) {
resolve('canceled')
}
if (callback) {
callback(null, 'canceled', responseHeaders)
}
return
}
log({ err: 'socket', body, headers: responseHeaders })
if (reject) {
reject(new Error(`error happened in your connection. Reason: ${response.message}`))
}
if (callback) {
const returnError = new Error(`error happened in your connection. Reason: ${response.message}`)
returnError.scope = 'socket'
returnError.errid = 'request'
callback(returnError)
}
return
}
delete responseHeaders.server
delete responseHeaders['content-length']
/* if (opts.dontParse) {
parsed = body
} else {
try { parsed = JSON.parse(body) } catch (err) { parsed = body }
} */
if (statusCode >= 200 && statusCode < 400) {
log({ err: null, body, headers: responseHeaders })
if (resolve) {
resolve(body)
}
if (callback) {
callback(null, body, responseHeaders)
}
return
}
// cloudant stacktrace
if (typeof body === 'string') {
body = { message: body }
}
if (!body.message && (body.reason || body.error)) {
body.message = (body.reason || body.error)
}
// fix cloudant issues where they give an erlang stacktrace as js
delete body.stack
// scrub credentials
scrubRequest(req)
log({ err: 'couch', body, headers: responseHeaders })
const message = body.message || 'couch returned ' + statusCode
const errors = new Error(message)
errors.scope = 'couch'
errors.statusCode = statusCode
errors.request = req
errors.headers = responseHeaders
errors.errid = 'non_200'
errors.name = 'Error'
errors.description = message
// add any attributes from the HTTP response into the
// Error object (except message, which would overwrite
// the text message of the Error)
delete body.message
Object.assign(errors, body)
if (reject) {
reject(errors)
}
if (callback) {
callback(errors)
}
}