在我的Node.js应用程序中,我试图连接到Amazon上托管的MySQL数据库。
$ npm install mysql
我的代码如下所示:
var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'my amazon sql db', user : 'me', password : 'secret', database : 'my_db' }); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) { if (err) throw err; console.log('The solution is: ', rows[0].solution); }); connection.end();
我可以使用Workbench连接到我的MySQL数据库-因此,我很确定我的凭据可以。
当我尝试连接时,出现以下错误:
Connection.js:91未捕获的TypeError:Net.createConnection不是函数
从npm库中调试代码-这是引发错误的地方connection.js:
connection.js
this._socket = (this.config.socketPath) ? Net.createConnection(this.config.socketPath) : Net.createConnection(this.config.port, this.config.host);
该connection.js具有相关性:
var Net = require('net');
我在Windows计算机上本地运行Node.js。
谁能告诉我是什么原因导致此错误?
创建了一个单独的票证: 调用Node.js net.createConnection引发错误
的net需要和MySQL节点模块中使用的模块是Node.js的本身的核心部分。您即将获得的Net.createConnection不是函数的错误意味着它将作为一个空对象出现,并且该错误与您对问题的评论之一有关:
net
Net.createConnection
我正在浏览器中测试代码。
您只能在Node.js上运行此特定模块,而不能在Web浏览器中运行它。
人们可以把一个可能性是通过像封隔器来运行代码browserify或的WebPack所以你可以很容易地require('mysql')在你的浏览器,但它不会工作。作为net模块核心依赖的mysql模块将转换为空对象{}。那不是一个bug,而是它应该如何工作的。浏览器没有通用的tcp实现,因此无法进行仿真。空对象旨在防止require('net')在浏览器中正常运行的模块发生故障。
require('mysql')
mysql
{}
require('net')
为避免此错误,您需要在纯Node.js环境中而不是在浏览器中运行此代码。一个简单的服务器可以达到这个目的,因为浏览器中客户端中的此代码无法正常工作,并且会增加安全漏洞,因为客户端的所有操作都是操作性的,因此也不安全。您不想在客户端公开数据库,而只使用数据库。