Node JS具有oracleDB可重用功能

时间:2016-12-25 19:22:00

标签: javascript node.js express

我想在这里学习nodeJS。但我不明白我在这里做了什么错?调试器根本没用。这里有任何帮助。当我不放功能时它起作用

  

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;

1 个答案:

答案 0 :(得分:1)

由于db调用的异步性质,您将获得undefined个值。您必须将callback功能传递给getConnected来电。

<强> 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});
      }
   });
});