0
請求:https://www.npmjs.com/package/request使用請求npm模塊發出http請求時,Node.js async.queue掛起。顯示了
我有同時要求網站在隊列中的請求模塊數額巨大(10000
一次)的麻煩。它適用於說250或更多列表。但是,當我提供csv
的任何接近300
或更多的東西時,它只是掛起而q.drain
從未真正觸發。 代碼:
program.command('sanitizedata <file> <outfile>').description('Sanitize Data').action((file, outfile) => {
if(file !== '' && outfile != '') {
var request = require("request");
var parse = require('url-parse');
csv({noheader:false, trim:true})
.fromFile(file)
.on('end_parsed', function(SitesArray) {
var possibleUrls = [];
var q = async.queue(function (task, done) {
var parsed = parse(task.url);
if(parsed.protocol == '') {
task.url = 'http://' + task.url;
task.host = parsed.pathname;
}
var options = {
url: `${task.url}`,
headers: {
'User-Agent': 'request',
'Host': `${task.host}`
}
};
request(options , function(err, res, body) {
if (err) return done(err);
if (res.statusCode != 200) return done(res.statusCode);
done(res);
});
}, 5);
SitesArray.map(function(site, index) {
q.push(site, function(result) {
if(result.statusCode == 200) {
delete site['host'];
console.log('\x1b[42m\x1b[37m%s\x1b[0m \x1b[46m\x1b[37m%s\x1b[0m', `Assert Success:${site.url}`, `${index}`);
possibleUrls.insert(site.index, site);
} else {
console.log('\n\r' + result)
return false;
}
});
});
q.drain = function() {
var csvOutput = toCSV(possibleUrls);
console.log('draining')
fs.outputFile(`./data/sanitizedata/${outfile}`, csvOutput, function(err) {
if(err) {
return console.log(err);
}
console.log(`The file ${outfile} was saved!`);
process.exit();
});
console.log('all items have been processed');
}
});
}}
);
某處的最後一個請求接近它顯示了一個ETIMEDOUT (connection timed out)
錯誤。我有數據以CSV格式..
index,url
...
...
9993,supercircusspectacular.com
9994,theleadershipnetwork.com
9995,wizardofozthemusical.com
9996,allnews365.com
9997,blog.vendhq.com
9998,businesspropertynetwork.co.uk
9999,dashboardjunkie.com