【问题】
折腾:
【记录】折腾Node.js + mysql + restify
的过程中,在Node.js中安装了mysql:
CLi@PC-CLI-1 /cygdrive/d/tmp/tmp_dev_root/node.js $ npm install mysql npm http GET https://registry.npmjs.org/mysql npm http 200 https://registry.npmjs.org/mysql npm http GET https://registry.npmjs.org/mysql/-/mysql-2.0.0-alpha4.tgz npm http 200 https://registry.npmjs.org/mysql/-/mysql-2.0.0-alpha4.tgz npm http GET https://registry.npmjs.org/require-all/0.0.3 npm http 200 https://registry.npmjs.org/require-all/0.0.3 npm http GET https://registry.npmjs.org/require-all/-/require-all-0.0.3.tgz npm http 200 https://registry.npmjs.org/require-all/-/require-all-0.0.3.tgz [email protected] node_modules\mysql └── [email protected]
之后,去测试mysql。
相关代码如下:
var mysql = require('mysql'); var TEST_DATABASE = 'nodejs_db'; var TEST_TABLE = 'test'; //创建连接 var client = mysql.createClient({ user: 'root', password: 'rainbow', }); ......
结果出错:
结果出错:
D:\tmp\tmp_dev_root\node.js\mysql\mysql_test.js:7 var client = mysql.createClient({ ^ TypeError: Object #<Object> has no method 'createClient' at Object.<anonymous> (D:\tmp\tmp_dev_root\node.js\mysql\mysql_test.js:7:20) at Module._compile (module.js:449:26) at Object.Module._extensions..js (module.js:467:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.runMain (module.js:492:10) at process.startup.processNextTick.process._tickCallback (node.js:244:9)
【解决过程】
1.找了半天,终于找到了个有用的:
Not working with latest version of node-mysql
然后参考其解释:
v2.0.0-alpha (2012-05-15)
This release is a rewrite. You should carefully test your application after
upgrading to avoid problems.…
The first thing you will run into is that the old
Client
class is gone andhas been replaced with a less ambitious
Connection
class. So instead of
mysql.createClient()
, you now have to:var mysql = require(‘mysql’);
var connection = mysql.createConnection({host : ‘localhost’,
user : ‘me’,
password : ‘secret’,
});
把源码改为:
var mysql = require('mysql'); var TEST_DATABASE = 'nodejs_db'; var TEST_TABLE = 'test'; // //创建连接 // var client = mysql.createClient({ // user: 'root', // password: 'rainbow', // }); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : 'xxxxxx', }); //创建数据库 connection.query('CREATE DATABASE '+TEST_DATABASE, function(err) { if (err && err.number != mysql.ERROR_DB_CREATE_EXISTS) { throw err; } }); //不指定回调函数,如果出错,则体现为客户端错误 connection.query('USE '+TEST_DATABASE); //创建表格,插入数据 connection.query( 'CREATE TABLE '+TEST_TABLE+ '(id INT(11) AUTO_INCREMENT, '+ 'name VARCHAR(255), '+ 'PRIMARY KEY (id))' ); connection.query( 'INSERT INTO '+TEST_TABLE+' '+ 'SET name = ?', ['nodejs1'] ); var query = connection.query( 'INSERT INTO '+TEST_TABLE+' '+ 'SET name = ?', ['nodejs2'] ); //查询,并设置回调函数 connection.query( 'SELECT * FROM '+TEST_TABLE, function selectCb(err, results, fields) { if (err) { throw err; } console.log(results); console.log(fields); connection.end(); } );
然后就可以成功运行了:
D:\tmp\tmp_dev_root\node.js\mysql>node mysql_test.js [ { id: 1, name: 'nodejs1' }, { id: 2, name: 'nodejs2' } ] [ { catalog: 'def', db: 'nodejs_db', table: 'test', orgTable: 'test', name: 'id', orgName: 'id', filler1: <Buffer 0c>, charsetNr: 63, length: undefined, type: 3, flags: 16899, decimals: 0, filler2: <Buffer 00 00>, default: undefined, zeroFill: false, fieldLength: 11 }, { catalog: 'def', db: 'nodejs_db', table: 'test', orgTable: 'test', name: 'name', orgName: 'name', filler1: <Buffer 0c>, charsetNr: 33, length: undefined, type: 253, flags: 0, decimals: 0, filler2: <Buffer 00 00>, default: undefined, zeroFill: false, fieldLength: 765 } ]
然后也可以通过MySQL的命令行(通过开始菜单找到MySQL -> MySQL 5.5 Command Line Client),验证出结果的确新增了对应的nodejs_db:
Enter password: ******** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.5.18 MySQL Community Server (GPL) Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | joomla | | mysql | | performance_schema | | test | | wordpress | +--------------------+ 6 rows in set (0.08 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | joomla | | mysql | | nodejs_db | | performance_schema | | test | | wordpress | +--------------------+ 7 rows in set (0.02 sec) mysql>
【总结】
运行mysql.createClient出错的原因在于,新版的Node.js中的mysql,已经去掉了createClient,而改为了mysql.createConnection。
所以换为mysql.createConnection,就可以正常运行了。
转载请注明:在路上 » 【已解决】Node.js中测试mysql的代码var client = mysql.createClient运行出错:TypeError: Object # has no method ‘createClient’