2016-12-25 50 views
1

我想在這裏學習nodeJS。但我不明白我在這裏做了什麼錯誤?調試器根本沒有幫助。任何幫助在這裏感謝。它的工作原理,當我不把功能即帶有oracleDB可重用功能的節點JS

功能(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; 
+0

是這樣的反應是不是充滿了用戶數據的問題? – Mike

+0

我越來越沒有定義,只有當我使用功能,否則它工作正常,沒有功能 – jimagic

+0

你介意把你的終端的錯誤信息到問題?它可以有一些有用的信息。 – Mike

回答

1

由於分貝的呼叫異步性質的,你得到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}); 
     } 
    }); 
}); 
+0

@Jiten,你編輯了答案並刪除了'return res.render('users',{allUsers:[]});});',但是這行是必需的,因爲你沒有收到任何數據。 –

+0

我確實得到了數據,但我得到了另一個錯誤,請參閱我的另一個帖子http://stackoverflow.com/questions/41325814/nodejs-data-coming-as-empty-object-from-oracledb-get?noredirect=1 #comment69855544_41325814 – jimagic