2017-04-25 23 views
1

Ich bin neu bei Nodejs und JavaScript. Ich versuche ein sehr einfaches Beispiel für die Verbindung von MySQL mit Nodejs. Ich verwende ein npm jdbc-Paket für diesen Zweck. Unten ist das Code-Snippet, das ich für die Verbindung verwende und unterhalb der Exception bin. Können Sie mir bitte dabei helfen?Node.js und jdbc: TypeError: Kann die Eigenschaft 'URL' von undefined nicht lesen

Code:

var express = require('express'); 
var app = express(); 
var server = require('http').Server(app); 
var https =require('http'); 
var io = require('socket.io')(server); 
var kafka = require('kafka-node'); 
var cassandra = require('cassandra-driver'); 
var jdbc = new (require('jdbc')); 
var jinst = require('jdbc/lib/jinst'); 
var Pool = require('jdbc/lib/pool'); 
var _ = require('underscore'); 
// var cors = require("cors"); 
app.use(express.static(__dirname + '/view')); 

server.listen(3000); 
app.use('/bower_components', express.static(__dirname + '/bower_components')); 
app.get('/', function (req, res, next) { res.sendFile(__dirname + '/index.html');}); 

if (!jinst.isJvmCreated()) { 
    jinst.addOption("-Xrs"); 
    jinst.setupClasspath(['../mysql-connector-java-5.1.39-bin.jar']); 
} 

var config = { 
    url: 'jdbc:mysql://localhost:3306/DB', 
    user : 'root', 
    password: 'root', 
    minpoolsize: 2, 
    maxpoolsize: 3, 
    drivername: 'com.mysql.jdbc.Driver' 
}; 


//Initialize jdbc object 
jdbc.initialize(config, function(err, res){ if (err){ console.log(err); } }); 

jdbc.open(function(err, conn) { 
    if (conn) { 
    //Run first query 
    jdbc.executeQuery('show databases', function(err, results){ 
     if (err){ console.log(err); } 
     else if (results) { console.log(results); } 
    }); 
    }else{ 
    console.log('Connection object:' + conn); 
    console.log(err); 
    } 
}); 

jdbc.close(function(err){ 
    if(err) { console.log(err); } 
    else { console.log('Connection closed successfully!');} 
}); 

Ausnahme:

Field_Test\node_modules\jdbc\lib\pool.js:64 
    this._url = config.url; 
        ^

TypeError: Cannot read property 'url' of undefined 
    at JDBC.Pool (<Dir>\node_modules\jdbc\lib\pool.js:64:21) 
    at new JDBC (<Dir>\node_modules\jdbc\lib\jdbc.js:6:8) 
    at Object.<anonymous> (Web\app.js:10:12) 
    at Module._compile (module.js:570:32) 
    at Object.Module._extensions..js (module.js:579:10) 
    at Module.load (module.js:487:32) 
    at tryModuleLoad (module.js:446:12) 
    at Function.Module._load (module.js:438:3) 
    at Module.runMain (module.js:604:10) 
    at run (bootstrap_node.js:394:7) 

Antwort

3

Ihr Problem ist, an der Spitze mit dem erfordern, wie pro die docs https://www.npmjs.com/package/jdbc, wenn Sie eine neue Instanz erstellen Sie die config übergeben müssen Parameter können Sie es tun, zwei Möglichkeiten

var config = {url: 'jdbc:mysql://localhost:3306/DB'} 
var jdbc = new (require('jdbc'))(config); 

oder Sie können es in Linie tun der Code

var Jdbc = require('jdbc'); 
... 
var config = {url: 'jdbc:mysql://localhost:3306/DB'} 
var jdbc = new Jdbc(config) 

Im Rahmen des Codes

var express = require('express'); 
var app = express(); 
var server = require('http').Server(app); 
var https =require('http'); 
var io = require('socket.io')(server); 
var kafka = require('kafka-node'); 
var cassandra = require('cassandra-driver'); 
var Jdbc = require('jdbc'); 
var jinst = require('jdbc/lib/jinst'); 
var Pool = require('jdbc/lib/pool'); 
var _ = require('underscore'); 
// var cors = require("cors"); 
app.use(express.static(__dirname + '/view')); 

server.listen(3000); 
app.use('/bower_components', express.static(__dirname + '/bower_components')); 
app.get('/', function (req, res, next) { res.sendFile(__dirname + '/index.html');}); 

if (!jinst.isJvmCreated()) { 
    jinst.addOption("-Xrs"); 
    jinst.setupClasspath(['../mysql-connector-java-5.1.39-bin.jar']); 
} 

var config = { 
    url: 'jdbc:mysql://localhost:3306/DB', 
    user : 'root', 
    password: 'root', 
    minpoolsize: 2, 
    maxpoolsize: 3, 
    drivername: 'com.mysql.jdbc.Driver' 
}; 

var jdbc = new JDBC(config); 


//Initialize jdbc object 
jdbc.initialize(config, function(err, res){ if (err){ console.log(err); } }); 

jdbc.open(function(err, conn) { 
    if (conn) { 
    //Run first query 
    jdbc.executeQuery('show databases', function(err, results){ 
     if (err){ console.log(err); } 
     else if (results) { console.log(results); } 
    }); 
    }else{ 
    console.log('Connection object:' + conn); 
    console.log(err); 
    } 
}); 

jdbc.close(function(err){ 
    if(err) { console.log(err); } 
    else { console.log('Connection closed successfully!');} 
}); 
+0

Vielen Dank url Problem behoben, jetzt bin ich immer Field_Test \ app.js: 40 jdbc.open (function (err, anschl) { ^ TypeError: jdbc.open ist keine Funktion – nilesh1212

+0

vielleicht benutzen Sie eine alte Version des NPM-Moduls, aber die Dokumente schlagen vor, dass Sie Reserve als Funktion https://www.npmjs.com/package/jdbc verwenden # major-api-refactor zum Beispiel statt '' '' jdbc.open''' verwenden '' 'jdbc.reserve''' –

+0

Sicher werde ich einen Scheck bekommen – nilesh1212

Verwandte Themen