我想在这里学习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;
答案 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});
}
});
});