Ich habe 1.211.434 IP-Adressen, die in geolocations konvertiert werden mussten. Ich habe eine API gefunden, die diese Frage mit der GET-Anfrage beantwortet. Aber die Sache ist, wenn ich eine for-Schleife benutze, kann ich die IP-Adresse nicht senden und die Beschreibung richtig erhalten.Knoten JS für Loop- und Array-Push
Majorly Ich habe zwei Fragen:
Ich kann es einfach nicht ausgegeben, die
ip_and_info
Array und kann den Grund nicht finden. Kann mir jemand sagen, was schief gelaufen ist?Jetzt kann der Code, den ich schrieb, alle Informationen abrufen, die ich brauche, es gibt ungefähr 200 IP-Adressen in der test_ip.txt. Könnte es ein Problem geben, wenn ich versuche, all diese 1M IP-Adressen zu senden?
Gibt es jemanden, der mir einen Rat geben kann?
Sehr geschätzt.
Mein Code ist wie folgt:
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)
})
}
sehr willkommen!
Es ist nicht das Problem, aber Ihr Code zum Opfer zu fallen [* The Horror of Implicit Globals *] (http://blog.niftysnippets.org/2008/03/horror-of-implicit-globals. html) * (das ist ein Beitrag auf meinem anämischen kleinen Blog) * - deklariere deine Variablen. –
Sie benötigen Versprechen, wo Sie alle Ihre asynch Prozess in Array schieben und zusammen lösen –
Ihr Code sollte nur leere Arrays drucken. Das liegt daran, dass Ihre Schleife fertig ausgeführt wird, bevor getIPInfo() aufgelöst wird. Wie @VinodLouis gesagt hat, können Sie dies mit Hilfe von Promises umgehen. Wenn Sie sich mit Versprechen nicht wohl fühlen, lassen Sie es mich wissen. Ich werde versuchen, eine Lösung vorzuschlagen. –