in lib/net/request.js [14:61]
function request(message, options, fn) {
message = HttpMessage(message);
const updatedOptions = updateOptions(options);
const netProvider = message.protocol === 'http:' ? http : https;
const req = netProvider.request(message, updatedOptions, onResponse);
req.on('error', (error) => {
fn && fn(error, null);
});
return closeMaybe(/**@type ClientRequest */(req), updatedOptions);
/**
* @param {import('http').IncomingMessage} res
*/
function onResponse(res) {
/**@type {*}*/
let data = '';
/**@type {(Error & {statusCode?: number, data?: *})|null}*/
let error = null;
res.on('data', (chunk) => {
data += chunk.toString();
});
res.on('end', function() {
const contentType = res.headers['content-type'] || '';
if (contentType.indexOf('application/json') > -1) {
data = JSON.parse(data);
}
if (res.statusCode && (res.statusCode < 200 || res.statusCode > 299)) {
const errorDesc = data.error_description || '';
error = new Error('[' + res.statusCode + '] ' + (errorDesc || res.statusMessage));
error.statusCode = res.statusCode;
error.data = data;
}
fn && fn(error, data);
});
res.on('error', (error) => {
fn && fn(error, data);
});
}
}