Search code examples
node.jshttpgetreturn-value

How to return a value from a function that uses 'http.get()' method in Node.js?


I have a simple HTTP GET function that only needs to return the response in a function, but right now this function is returning void.

The code in sitechecks.js

var checkSite = () => {
    https.get('https://itmagazin.info', (res, err) => {
        if (res.statusCode === 200 && res.statusMessage === 'OK') {
            return `The site returned: ${res.statusMessage}`
        } else return `Error, the site returned: ${err.message}`
    })
}

module.exports = checkSite

And when I import the module in index.js, the console returns [Function: checkSite] and not the value itself.

// Index.js
var extSiteCheck = require('./sitechecks')

// This console prints [Function: checkSite] instead of "OK"
console.log(extSiteCheck.checkSite)

However, if I add the return statement on http.get() in the function, the console prints undefined. So I thought that this undefined is a progress, but I don't understand why does it return undefined?

(return http.get() in the checkSite function)

Any help, tips is appreciated.


Solution

  • Because callbacks in JavaScript are asynchronous, you can't return from within a callback.

    That means this

    console.log(extSiteCheck.checkSite)

    runs before the request comes back.

    You can try console logging within your callback (instead of trying to return a value), in order to see this in practice. But basically, whatever you are trying to achieve with the results of your get request, you need to do inside the callback.