Commit 988d4e25 by Marcin Cieslak

Improve HTTP error handling

Do not throw exception on invalid/mangled URL
Provide consistent error message with the URL
on all failures.
parent 2fce3035
...@@ -21,11 +21,14 @@ require('../lib/extensions'); ...@@ -21,11 +21,14 @@ require('../lib/extensions');
*/ */
function download(url, dest, cb) { function download(url, dest, cb) {
var returnError = function(err) { var reportError = function(err) {
cb(typeof err.message === 'string' ? err.message : err); cb(['Cannot download "', url, '": ',
typeof err.message === 'string' ? err.message : err].join(''));
};
var successful = function(response) {
return response.statusCode >= 200 && response.statusCode < 300;
}; };
if (url) {
applyProxy({ rejectUnauthorized: false }, function(options) { applyProxy({ rejectUnauthorized: false }, function(options) {
options.headers = { options.headers = {
'User-Agent': [ 'User-Agent': [
...@@ -33,20 +36,24 @@ function download(url, dest, cb) { ...@@ -33,20 +36,24 @@ function download(url, dest, cb) {
'node-sass-installer/', package.version 'node-sass-installer/', package.version
].join('') ].join('')
}; };
request.get(url, options).on('response', function(response) { try {
if (response.statusCode < 200 || response.statusCode >= 300) { request(url, options, function(err, response) {
returnError(['Can not download file from:', url].join()); if (err) {
return; reportError(err);
} else if (!successful(response)) {
reportError(['HTTP error', response.statusCode, response.statusMessage].join(' '));
} else {
cb();
} }
}).on('response', function(response) {
if (successful(response)) {
response.pipe(fs.createWriteStream(dest)); response.pipe(fs.createWriteStream(dest));
}
cb();
}).on('error', returnError);
}); });
} else { } catch (err) {
returnError('Download URL not defined, set SASS_BINARY_SITE in the environment to enable download.'); cb(err);
} }
});
} }
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment