Search code examples
javascriptnode.jsexpresscallbacktedious

Get the callback results (Nodejs)


I'm having a problem with my express and sql query code. I can't get the value of results of the sql query below but this works when logging the results. I've already return the results here.

Here's my sql.js code

var dataContext = require('node2sql')({
    username: 'user',
    password: 'password',
    server: '1xx.xx2.xx.xx9',
    options: {
        database: 'grades'
    }
});

module.exports = {
    DataQuery: function(query) {
        query = query.replace(/\s+/g, '').split("/");
        year = query[2].substr(2, 4);
        id = query[0];
        period = query[1].toUpperCase();

        if (period == 'SEM1') {
            period = "1st Semester";
        } else if (period == "SEM2") {
            period = "2nd Semester";
        }else if (period == 'SUM') {
            period = "Summer";
        }

        var queryStr = "SELECT SubjectCode,Grade FROM dbo.grade_list_" + year + " WHERE StudentNo=\'" + id + "\' and Semester=\'" + period + "\'";

        console.log(queryStr);

        dataContext.query(queryStr, function(err, results) {
            console.log(results)
            return results;
        });

    }
}

Here's my index page, as you can see I wanted to get the return value of data and show it to my index page (just a test only).

var express = require('express');
var sql = require('../libs/sql');

var router = express.Router();

router.get('/', function(req, res, next) {

    var data = sql.DataQuery("01-666-123/sem2/2009")
    res.end(data);

});

module.exports = router;

I accept any of your suggestions guys. I've already read this question which was asked before but still I can't figure out how to make this work. Thanks


Solution

  • You cannot return from a callback. (Callbacks are asynchronous and can complete at any time.) Try this:

    sql.js

    var dataContext = require('node2sql')({
        username: 'user',
        password: 'password',
        server: '1xx.xx2.xx.xx9',
        options: {
            database: 'grades'
        }
    });
    
    module.exports = {
        DataQuery: function(query, callback) {
            query = query.replace(/\s+/g, '').split("/");
            year = query[2].substr(2, 4);
            id = query[0];
            period = query[1].toUpperCase();
    
            if (period == 'SEM1') {
                period = "1st Semester";
            } else if (period == "SEM2") {
                period = "2nd Semester";
            }else if (period == 'SUM') {
                period = "Summer";
            }
    
            var queryStr = "SELECT SubjectCode,Grade FROM dbo.grade_list_" + year + " WHERE StudentNo=\'" + id + "\' and Semester=\'" + period + "\'";
    
            console.log(queryStr);
    
            dataContext.query(queryStr, callback);
    
        }
    }
    

    index.js

    var express = require('express');
    var sql = require('../libs/sql');
    
    var router = express.Router();
    
    router.get('/', function(req, res, next) {
    
        sql.DataQuery("01-666-123/sem2/2009", function(err, data) {
            res.end(data);
        });
    
    });
    
    module.exports = router;