2

I am trying to learn nodeJS here. But I don't understand what wrong I did here? Debugger does not help at all. Any help is appreciate here. It works when I do not put function i.e.

function (sql, params) {

db.js

var oracledb = require('oracledb');
var dbConfig = require('./dbconfig.js');

var rows;

// Get a non-pooled connection
var getConnected = function (sql, params) {

    oracledb.getConnection(
        {
            user: dbConfig.user,
            password: dbConfig.password,
            connectString: dbConfig.connectString
        },
        function (err, connection) {
            if (err) {
                console.error(err.message);
                return;
            }
            connection.execute(
                sql, params,

                function (err, result) {
                    if (err) {
                        console.error(err.message);
                        doRelease(connection);
                        return;
                    }
                    //console.log(result.metaData); // [ { name: 'DEPARTMENT_ID' }, { name: 'DEPARTMENT_NAME' } ]
                    //console.log(result.rows);     // [ [ 180, 'Construction' ] ]
                    //module.exports.rows  = result.rows;
                    rows = result.rows;
                    doRelease(connection);
                    return rows;
                });
        });
};


// Note: connections should always be released when not needed
function doRelease(connection) {
    connection.close(
        function(err) {
            if (err) {
                console.error(err.message);
            }
        });
    }

module.exports.getConnected = getConnected;

users.js

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

/* GET users listing. */
router.get('/all', function(req, res) {
    "user strict";
    var allUser = db.getConnected("select * from users", []);
    res.render('users', { allUsers: allUser});
});

app.js

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var index = require('./routes/index');
var users = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static('node_modules/bootstrap/dist'));

app.use('/', index);
app.use('/users', users);
/*

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});
*/

module.exports = app;
6
  • Is the problem that the response is not filled with user data? Commented Dec 25, 2016 at 19:27
  • i am getting undefined only when i use function otherwise it works fine without function Commented Dec 25, 2016 at 19:33
  • Would you mind putting the error message from your terminal into the question? It could have some useful information. Commented Dec 25, 2016 at 19:36
  • There is no error but this line get me 'undefined' --> var allUser = db.getConnected("select * from users", []); Commented Dec 25, 2016 at 19:42
  • 1
    You have to use callbacks or promises. Commented Dec 25, 2016 at 19:57

1 Answer 1

1

Because of asynchronous nature of db calls, you are getting undefined values. You have to pass callback function to getConnected call.

db.js

var getConnected = function (sql, params, callback) {
    oracledb.getConnection(
    {
        user: dbConfig.user,
        password: dbConfig.password,
        connectString: dbConfig.connectString
    },
    function (err, connection) {
        if (err) {
            console.error(err.message);
            callback(null); 
            return;
        }
        connection.execute(
            sql, params,

            function (err, result) {
                if (err) {
                    console.error(err.message);
                    doRelease(connection);
                    callback(null);
                    return;
                }
                //console.log(result.metaData); // [ { name: 'DEPARTMENT_ID' }, { name: 'DEPARTMENT_NAME' } ]
                //console.log(result.rows);     // [ [ 180, 'Construction' ] ]
                //module.exports.rows  = result.rows;
                rows = result.rows;
                doRelease(connection);
                callback(rows); 
                return;
            });
    });
};

user.js

router.get('/all', function(req, res) {
   "user strict";
   db.getConnected("select * from users", [], function(data){ //callback
      if (data){
         return res.render('users', { allUsers: data});
      }
   });
});
Sign up to request clarification or add additional context in comments.

2 Comments

@Jiten, you edited the answer and remove return res.render('users', {allUsers: []});});, but that line is required, incase you don't receive any data.
i did got the data but i got another error, please see my another post stackoverflow.com/questions/41325814/…

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.