0

I am trying to make a call to a REST call to an API and display the returned data on the view but my current code doesn't seem to be working. I am very new to node.js so I would really appreciate some help.

Here is what index.js looks like:

var router = require('express').Router();

function GetCompanyInformation() {
    var request = require('request');
    request('http://table.finance.yahoo.com/table.csv?s=orcl&a=0&b1&c=2010&d=0&e=1&f=2011&g=d&y=0&z=orcl', function (error, response, data) {
        if (!error && response.statusCode == 200) {
            return data;
        }
        return 'An error has occurred.'
    })
}

/* GET home page. */
router.get('/', function(req, res, next) {
    res.render('index', {
        title: 'Express',
        data : GetCompanyInformation()
    });
});

module.exports = router;

Here is my view index.hbs (handlebars):

<h1>{{ title }}</h1>
<h1>{{ data }}</h1>

Title is coming back fine. I am just not sure how to pass the data from the rest call. Or if i am even doing it correctly. My main goal is make a rest call and place the returned data in an array and then pass the array to the view.

I added a yahoo finance rest call just for an example.

Any help is much appreciated!

1 Answer 1

1

welcome to Nodejs , everything here is Asynchronous ,it means that you have to wait to your function finish before do something , usually we use a callback style (other options are promises for example) , code example :

function GetCompanyInformation(callback) {
    var request = require('request');
    request('http://table.finance.yahoo.com/table.csv?s=orcl&a=0&b1&c=2010&d=0&e=1&f=2011&g=d&y=0&z=orcl', function (error, response, data) {
        if (!error && response.statusCode == 200) {
            return callback(null,data);
        }
        return callback('An error has occurred.',null);
    })
}

/* GET home page. */
router.get('/', function(req, res, next) {
    GetCompanyInformation(function(err,data){
        //if(err) Manage error ; console.log(err)
        //else
        console.log(data)
        res.render('index', {
          title: 'Express',
          data : data
        });
    });
});
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.