javascript - node.js 无法连接到 mysql

标签 javascript mysql node.js

代码:

var mysql = require('mysql');
var db_config = require('./db-config.json');

var connection = mysql.createConnection({
  host: db_config.host,
  user: db_config.user,
  port: db_config.port,
  password: db_config.password,
  database: db_config.database
});

connection.connect(function(err){
  if (!err) {
    console.log("Database is connected... \n\n");
  } else {
    console.log("Error connecting database \n\n" + err);
  }
});

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();

我的 ./db-config.json 是

{
"host": "**.*.**.***",
"user": "***",
"port": "13306",
"password": "****",
"database": "***"
}

错误是 连接数据库错误

Error: Connection lost: The server closed the connection.
C:\project\Nodejs\my-app\routes\db\dbtest.js:21
if(err) throw err;
^

Error: Connection lost: The server closed the connection.
at Protocol.end            (C:\project\Nodejs\node_modules\mysql\lib\protocol\Protocol.js:113:13)
at Socket.<anonymous>    (C:\project\Nodejs\node_modules\mysql\lib\Connection.js:109:28)
at emitNone (events.js:111:20)
at Socket.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1055:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
--------------------
at Protocol._enqueue    (C:\project\Nodejs\node_modules\mysql\lib\protocol\Protocol.js:145:48)
at Protocol.handshake    (C:\project\Nodejs\node_modules\mysql\lib\protocol\Protocol.js:52:23)
at Connection.connect (C:\project\Nodejs\node_modules\mysql\lib\Connection.js:130:18)
at Object.<anonymous> (C:\project\Nodejs\my-app\routes\db\dbtest.js:12:12)
at Module._compile (module.js:643:30)
at Object.Module._extensions..js (module.js:654:10)
at Module.load (module.js:556:32)
at tryModuleLoad (module.js:499:12)
at Function.Module._load (module.js:491:3)
at Function.Module.runMain (module.js:684:10)

这很奇怪,因为这个数据库已经在另一个程序中使用,而且它工作得很好。 我认为是代码本身的问题,因为我本地的mysql没有问题。

我刚刚开始学习 nodejs 和 express,并停留在这个非常基础的阶段。任何帮助表示赞赏。

最佳答案

您将在回调完成其工作之前结束与数据库的连接。

var mysql = require('mysql');
var db_config = require('./db-config.json');

var connection = mysql.createConnection({
  host: db_config.host,
  user: db_config.user,
  port: db_config.port,
  password: db_config.password,
  database: db_config.database
});

connection.connect(function(err){
  if (err) {
    console.log("Error connecting database \n\n" + err);
    throw err
  } 
  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();
    });
});

回调不会立即执行,它们是异步的。在完成所有异步操作之前,您的代码将到达 connection.end()。

关于javascript - node.js 无法连接到 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49786728/

相关文章:

php - Laravel Eloquent 有一个。试图获得非对象的属性

node.js - 查找插入 mongoose 的最新子文档的 id

javascript - 丢失 HTTP 请求正文

javascript - 如何使用 AppleScript 以编程方式关闭仪表板?

PHP MySQL 选择最大行数返回错误的数字

SQL 选择器上的 PHP 函数

node.js - 使用 NPM 和 grunt js 构建系统

mysql - Nodejs-mysql 池连接不适用于异步系列

javascript - jquery 触发自定义全局事件

javascript - 删除 div 的特定区域