Tuesday, 4 April 2017

Node JS for loop and array push

I have 1,211,434 IP addresses that needed to be converted into geolocations. I found an api that answers this question by using GET request. But the thing is, the when using a for loop, I can not send the ip address and receive the description correctly.

Majorly I have two questions:

  1. I just can not output the ip_and_info array, and can't find the reason. Can anybody tell me what went wrong?

  2. Now, the code I wrote can retrieve all the information that I need, there are around 200 ip addresses in the test_ip.txt. Would there be a potential problem if I try to send all those 1M IP addresses?

Is there anyone can give me some advice?

Much Appreciated.

My code is as below:

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)
    })
}

Much Appreciated!



via Adam Leo

No comments:

Post a Comment