2017-02-06 10 views
-1

Ich habe Probleme beim Verbinden von Node.js Anwendung mit SQL-Datenbank. Fehler tritt auf "req.getConnection ist keine Funktion". Ich versuche, Daten aus der Datenbank zu erhalten, sobald ich auf eine bestimmte Seite klicke (zB Benutzer)."req.getConnection ist keine Funktion" Node.js

Mein Code ist wie unten

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 flash = require('express-flash'); 
var session = require('express-session'); 
var expressValidator = require('express-validator'); 
var methodOverride = require('method-override'); 

var connection = require('express-myconnection'); 
var mysql = require('mysql'); 

var routes = 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(session({secret:"mysecretpass"})); 
app.use(flash()); 
app.use(expressValidator()); 
app.use(cookieParser()); 
app.use(require('less-middleware')(path.join(__dirname, 'public'))); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes); 
app.use('/users', users); 

app.use(methodOverride(function(req, res){ 
if (req.body && typeof req.body === 'object' && '_method' in req.body) 
    { 
     var method = req.body._method; 
     delete req.body._method; 
     return method; 
    } 
    })); 

/*----------------------------------------- 
* Connection peer, register as middleware 
* type koneksi:single,pool and request 
-----------------------------------------*/ 
app.use(
    connection(mysql,{ 
     host:'localhost', 
     user:'root', 
     password:'', 
     port:3306, 
     database:'stores' 
    },'single') 
    ); 


// 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 handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: err 
    }); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
    message: err.message, 
    error: {} 
    }); 
}); 
module.exports = app; 

Routen/index.js

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

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('dashboard', { title: 'Dashboard' }); 
}); 

router.get('/admin_users', function(req, res, next) { 
    req.getConnection(function(err,connection){ 
     var query = connection.query('SELECT * FROM users',function(err,rows) 
     { 
      if(err) 
       var errornya = ("Error Selecting : %s ",err); 
      req.flash('msg_error', errornya); 
      res.render('admin_users',{title:"Admin Users",data:rows}); 
     }); 
     //console.log(query.sql); 
    }); 
}); 

module.exports = router; 

Antwort

3

Sie fügen die express-myconnection Middleware nach Ihre routes Middleware. Middleware wird in der Reihenfolge ausgeführt, in der sie hinzugefügt wird. Daher ist die getConnection-Funktion für das req-Objekt nicht definiert, bis nach Ihre express-myconnection Middleware ausgeführt wird.

Verschieben Sie einfach die Verbindung Middleware über die Verwendung von Routen, dh.

app.use(
    connection(mysql,{ 
     host:'localhost', 
     user:'root', 
     password:'', 
     port:3306, 
     database:'stores' 
    },'single') 
); 

app.use('/', routes); 
app.use('/users', users); 
Verwandte Themen