Node.js 和 jdbc:TypeError:无法读取未定义的属性“url”
Posted
技术标签:
【中文标题】Node.js 和 jdbc:TypeError:无法读取未定义的属性“url”【英文标题】:Node.js and jdbc : TypeError: Cannot read property 'url' of undefined 【发布时间】: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)
【问题讨论】:
【参考方案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
我一定会检查的以上是关于Node.js 和 jdbc:TypeError:无法读取未定义的属性“url”的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:无法读取未定义的属性“获取”(Node.js)
Node.js 和 Socket.io UTF8 验证 TypeError 来自 ws
Node.js | TypeError: [...] 不是函数
node.js/discord.js:TypeError:无法读取 null 的属性“setPresence”
错误:TypeError:尝试为网站 node.js 注册用户时无法读取未定义的属性“catch”
Node.js Discord.js UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“calculatedPosition”