一尘不染

适用于Node.js的MySQL库中的错误

node.js

在我的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

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引发错误


阅读 173

收藏
2020-07-07

共1个答案

一尘不染

net需要和MySQL节点模块中使用的模块是Node.js的本身的核心部分。您即将获得的Net.createConnection不是函数的错误意味着它将作为一个空对象出现,并且该错误与您对问题的评论之一有关:

我正在浏览器中测试代码。

您只能在Node.js上运行此特定模块,而不能在Web浏览器中运行它。

人们可以把一个可能性是通过像封隔器来运行代码browserify的WebPack所以你可以很容易地require('mysql')在你的浏览器,但它不会工作。作为net模块核心依赖的mysql模块将转换为空对象{}。那不是一个bug,而是它应该如何工作的。浏览器没有通用的tcp实现,因此无法进行仿真。空对象旨在防止require('net')在浏览器中正常运行的模块发生故障。

为避免此错误,您需要在纯Node.js环境中而不是在浏览器中运行此代码。一个简单的服务器可以达到这个目的,因为浏览器中客户端中的此代码无法正常工作,并且会增加安全漏洞,因为客户端的所有操作都是操作性的,因此也不安全。您不想在客户端公开数据库,而只使用数据库。

2020-07-07