Node.js的MySQL库出错

use*_*912 8 mysql node.js

在我的Node.js应用程序中,我正在尝试连接到亚马逊上托管的MySQL数据库.

$ npm install mysql
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像这样:

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();
Run Code Online (Sandbox Code Playgroud)

我可以使用Workbench连接到我的MySQL数据库 - 因此,我很确定我的凭据是可以的.

当我尝试连接时,我收到以下错误:

Connection.js:91 Uncaught TypeError:Net.createConnection不是函数

调试npm库中的代码 - 这是引发错误的地方connection.js:

this._socket = (this.config.socketPath)
  ? Net.createConnection(this.config.socketPath)
  : Net.createConnection(this.config.port, this.config.host);
Run Code Online (Sandbox Code Playgroud)

connection.js具有相关性:

var Net  = require('net');
Run Code Online (Sandbox Code Playgroud)

我在Windows计算机上本地运行Node.js.

谁能告诉我可能导致此错误的原因是什么?

创建了一个单独的票证: 抛出调用Node.js net.createConnection的错误

HiD*_*Deo 20

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

我正在浏览器中测试我的代码.

您必须仅在Node.js上运行此特定模块,不能在Web浏览器中运行它.

人们可以把一个可能性是通过像封隔器来运行代码browserify的WebPack这样你就可以很容易地require('mysql')在你的浏览器,但它不会工作.作为net模块的核心依赖性的mysql模块将被转换为空对象{}.这不是一个错误,它应该如何工作.浏览器没有通用的tcp实现,因此无法模拟.空对象旨在防止require('net')在浏览器中工作的模块失败.

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