Shruti Gupta
Shruti Gupta

Reputation: 87

How to get data from multiple model in single controller in NodeJS?

I am working on nodejs and i am using "Express js" framework, I am working on Controller and i am trying to get data from "two model functions" but i am getting message "anonymous", How can i get data from multiple "model functions", Here is my code,

homeController.index = function (req, res, next) {
  // fetching data into 'data variable' from FetchRecords model
  homeModel.FetchRecords(function (err, data) {
    if (err) {
      req.flash('error', 'There was no records.');
    } else {
      res.render('home/index', { data: data });
    }
  });

  homeModel.getAverage(function (average) {
    console.log(average);
    // res.render('home/index',{data:average});
  });
};
homeModel.FetchRecords = function (data) {
  sql.query('SELECT * FROM rating', function (err, res) {
    if (err) {
      return data(err, null);
    } else {
      return data(null, res);
    }
  });
};

homeModel.getAverage = function (average) {
  console.log(average);
  sql.query('SELECT avg(value) FROM rating', function (err, res) {
    if (err) {
      return average(err, null);
    } else {
      return average(null, res);
    }
  });
};

Upvotes: 1

Views: 776

Answers (1)

Emaad Infotech
Emaad Infotech

Reputation: 121

Inside homeModel just create 1 function instead of 2 separate. You can combine both MySQL queries into one like this.

const FetchRecordsAndAverage = function (data) {
      sql.query('SELECT * FROM rating; SELECT avg(value) FROM rating', function (err, res) {
        if (err) {
          return data(err, null);
        } else {
          return data(null, res);
        }
      });
    };

module.exports = { 
    FetchRecordsAndAverage
}

With this you will get combined data of both queries as arrays inside array. Result of queries can be accessed as data[0] & data[1].

Upvotes: 1

Related Questions