Node.js 的 MySQL 库中的错误

Posted

技术标签:

【中文标题】Node.js 的 MySQL 库中的错误【英文标题】:Error in MySQL library for Node.js 【发布时间】:2016-10-26 15:14:05 【问题描述】:

在我的 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 Uncaught TypeError: Net.createConnection is not a function

从 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。

谁能告诉我是什么导致了这个错误?

创建了一个单独的票: Error thrown calling Node.js net.createConnection

【问题讨论】:

This might be helpful 当您调试它并找到根本原因时,node.js 版本可能存在问题。您使用的是哪个节点版本? 我的节点是4.2.3版 可能是您的亚马逊凭证吗?某处?虽然不确定 它不是亚马逊凭证。错误表示找不到net.connection方法 【参考方案1】:

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

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

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

人们可能会想到一种可能性是通过像browserify 或webpack 这样的打包程序运行您的代码,这样您就可以在浏览器中轻松地require('mysql'),但它不会工作。 net 模块是mysql 模块的核心依赖项,它将被转换为一个空对象。 这不是错误,这是它应该如何工作的。浏览器没有通用的 tcp 实现,因此无法模拟。空对象旨在防止 require('net') 在浏览器中正常工作的模块上失败。

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

【讨论】:

但是如果我使用 express 运行本地服务器就不会发生这种情况,不是吗?因为我面临同样的错误,找不到任何解决这个问题的方法。但它只出现,如果我使用 createConnection,如果我使用池,它工作得很好。 如果我使用rest API来创建连接和保存数据怎么办?我希望这将适用于 Webpack 和 browserify。

以上是关于Node.js 的 MySQL 库中的错误的主要内容,如果未能解决你的问题,请参考以下文章

使用池的node.js mysql中的错误处理和丢失连接

使用node.js将postgres库中的空间数据导出为geojson

Node.js 和 mysql 回调:查询回调中的查询

Node.js MySQL WHERE占位符,带有通配符错误

node.js 中的未定义错误

MySQL 结果来自 html 中的 node.js,由 react.js