Uncaught asynchronous error
edwardsph opened this issue · comments
There is a problem with an uncaught asynchronous error in the needle library which crashes the whole node process. Can you fix this to throw an error in the callback instead of crashing the process.
The short example below demonstrates the problem and I tried both approaches to called needle.
const needle = require('needle');
const url = 'https://wayback.archive-it.org/3259/20160921140616/https://www.arc.gov/research/MapsofAppalachia.asp?MAP_ID=11';
const options = {
user_agent: 'user_agent',
follow_max: 8,
response_timeout: 3000,
auth: 'auto',
headers: {}
}
test(url, options).then((msg) => {
console.log(msg);
process.exit(0)
});
function test(url, options) {
return new Promise((resolve, reject) => {
needle.head(url, options, (error, res) => {
console.log('res' + res)
console.log('error' + error);
resolve(error, res)
})
})
}
function test2(url, options) {
return needle('head', url, options)
.then(function(resp) {
console.log('res' + resp)
})
.catch(function(err) {
console.log('error' + err);
});
}
The problem is the content type header: content-type: text/html; charset=maccentraleurope
.../node_modules/needle/node_modules/iconv-lite/lib/index.js:104
throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '"+enc+"')");
^
Error: Encoding not recognized: 'maccentraleurope' (searched as: 'maccentraleurope')
at Object.getCodec (.../node_modules/needle/node_modules/iconv-lite/lib/index.js:104:23)
at Object.getDecoder (.../node_modules/needle/node_modules/iconv-lite/lib/index.js:125:23)
at Object.decodeStream (.../node_modules/needle/node_modules/iconv-lite/lib/index.js:156:55)
at StreamDecoder._transform (.../node_modules/needle/lib/decoder.js:39:26)
at StreamDecoder.Transform._read (_stream_transform.js:190:10)
at StreamDecoder.Transform._write (_stream_transform.js:178:12)
at doWrite (_stream_writable.js:415:12)
at writeOrBuffer (_stream_writable.js:399:5)
at StreamDecoder.Writable.write (_stream_writable.js:299:11)
at IncomingMessage.ondata (_stream_readable.js:710:20)
at IncomingMessage.emit (events.js:203:15)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
at IncomingMessage.Readable.push (_stream_readable.js:224:10)
at HTTPParser.parserOnBody (_http_common.js:124:22)
at TLSSocket.socketOnData (_http_client.js:451:20)
at TLSSocket.emit (events.js:198:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
at TLSSocket.Readable.push (_stream_readable.js:224:10)
at TLSWrap.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)