Search code examples
javascriptjsonnode.jsexpressnode-orm2

node js express trying to pass an orm json to the client


in my app.js

question            = require('./routes/question_api'),

    app.use(orm.express("mysql://[email protected]/daat", {
        define: function (db, models, next) {
            var question_model =  db.define('questions', {
                id              : Number,
              ..... more definitions 
                }
            });
            models.question = question_model;
            next();
        }
    }));

in my question_api.js

var questions = require('../lib/questions/questions.js');

//NEW Question
//Get Question by ID
//Get Question By Category

exports.list = function(req, res){
    res.json(questions.list_top_rates(req, res));
};

in my questions.js

exports.list_top_rates = function(req, res) {
    var limit  = req.limit || 20;
    var final_result = {"1": {}};

    //Z means descending
    req.models.question.find({}, limit, ["rating", "Z"], function(err, questions) {
        final_result = questions;
        return final_result[0];
    });
    return final_result;
//    return final_result;
//    return {
//        1: "first question , limit is " + limit,
//        2: "second question",
//        3: "third question",
//        4: "forth question"
//    }
};

I get empty results. if i return directly from question_api.js, it works.


Solution

  • I don't know the library you are using, but considering you are given a callback as parameter, find is probably an asynchronous function. You will have to change your code accordingly:

    question_api.js:

    exports.list = function(req, res){
        questions.list_top_rates(req, function(final_result) {
            res.json(final_result);
        });
    };
    

    questions.js:

    exports.list_top_rates = function(req, callback /* the parameter res is not needed anymore */) {
        var limit  = req.limit || 20;
        var final_result = {"1": {}};
    
        //Z means descending
        req.models.question.find({}, limit, ["rating", "Z"], function(err, questions) {
            final_result = questions;
            callback(final_result[0]);
        });
    };