带有oracleDB可重用function的Node JS

我正在尝试在这里学习nodeJS。 但我不明白我在这里做了什么错误? debugging器根本没有帮助。 任何帮助在这里感谢。 当我没有把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; 

由于数据库调用的asynchronous性质,您正在获取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}); } }); });