【问题标题】:Node.js and jdbc : TypeError: Cannot read property 'url' of undefinedNode.js 和 jdbc:TypeError:无法读取未定义的属性“url”
【发布时间】:2017-09-22 13:46:24
【问题描述】:

我是 nodejs 和 JavaScript 的新手。我正在尝试一个将 MySQL 连接到 nodejs 的非常基本的示例。为此,我正在使用 npm jdbc 包。下面是我用于连接并低于异常的代码 sn-p。 你能帮我解决这个问题吗?

代码:

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!');}
});

例外:

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)

【问题讨论】:

    标签: javascript mysql node.js jdbc npm


    【解决方案1】:

    您的问题在于顶部的要求,根据文档https://www.npmjs.com/package/jdbc,当您创建一个新实例时,您需要传递配置参数,您可以通过两种方式完成

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

    或者你可以在代码中直接做

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

    在您的代码上下文中

    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!');}
    });
    

    【讨论】:

    • 非常感谢您解决了 url 问题,现在我得到 Field_Test\app.js:40 jdbc.open(function(err, conn) { ^ TypeError: jdbc.open is not a function跨度>
    • 也许您使用的是旧版本的 npm 模块,但文档建议您使用 Reserve 作为函数 npmjs.com/package/jdbc#major-api-refactor 例如,而不是使用 jdbc.open 使用 jdbc.reserve
    • 我一定会检查的
    猜你喜欢
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 2016-05-09
    • 2021-12-05
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多