J'ai 1 211 434 adresses IP qui ont dû être converties en géolocalisations. J'ai trouvé une API qui répond à cette question en utilisant la requête GET. Mais la chose est, lorsque vous utilisez une boucle for, je ne peux pas envoyer l'adresse IP et recevoir la description correctement.Noeud JS pour la boucle et la poussée de matrice
Majorly J'ai deux questions:
Je ne peux pas sortir le tableau
ip_and_info
, et ne peut pas trouver la raison. Quelqu'un peut-il me dire ce qui s'est mal passé?Maintenant, le code que j'ai écrit peut récupérer toutes les informations dont j'ai besoin, il y a environ 200 adresses IP dans le test_ip.txt. Y aurait-il un problème potentiel si j'essaie d'envoyer toutes ces adresses IP 1M?
Est-ce que quelqu'un peut me donner un conseil?
Très appréciée.
Mon code est comme ci-dessous:
fs = require('fs')
async = require("async")
http = require('http')
ip_and_info = []
// getIPInfo("1.171.58.24")
fs.readFile("../test_ips.txt", "utf-8", (err, content, printArr) => {
content = content.split("\n")
async.each(content, (ip) => {
content = getIPInfo(ip)
// console.log(ip)
}, (err) => {
if (err) {
console.log(err)
} else {
console.log(ip_and_info)
}
})
// for (i in content) {
// ((ip) => {
// getIPInfo(ip)
// })(content[i])
// }
});
function getIPInfo(ipAddress) {
options = {
host: 'freegeoip.net',
path: '/csv/' + ipAddress
}
request = http.get(options, function(response) {
// console.log('STATUS: ' + response.statusCode)
// console.log('HEADERS: ' + JSON.stringify(response.headers))
// Buffer the body entirely for processing as a whole.
bodyChunks = []
response.on('data', function(chunk) {
bodyChunks.push(chunk)
}).on('end', function() {
body = Buffer.concat(bodyChunks)
content = body.toString('ascii')
ip_and_info.push(content)
console.log(content)
return content
})
})
request.on('error', function(e) {
console.log('ERROR: ' + e.message)
})
}
PRÉCIEUSE!
Ce n'est pas le problème, mais votre code est en proie à [* L'horreur de Implicite Globals *] (http://blog.niftysnippets.org/2008/03/horror-of-implicit-globals. html) * (c'est un post sur mon petit blog anémique) * - déclarez vos variables. –
Vous avez besoin de promesses où vous poussez tout votre processus asynchrone dans le tableau et le résolvez ensemble –
Votre code devrait imprimer juste des tableaux vides. C'est parce que votre boucle terminera son exécution avant même que getIPInfo() ne soit résolu. Comme l'a dit @VinodLouis, vous pouvez gérer cela avec l'aide de Promises. Si vous n'êtes pas à l'aise avec les promesses, faites le moi savoir. Je vais essayer de proposer une solution. –