2017-06-12 7 views
1

mysqlノードパッケージを使用して、Node.jsから自分のパーソナルコンピュータのローカルmysqlデータベースに接続できません。私のNode.jsプログラムはmysqlデータベースと同じコンピュータ上にあるので、ネットワークは必要ありません。私はスタックオーバーフローで複数のソリューションを試してみましたが、うまくいかないようです。私のmysqlデータベースにNode.jsで接続できません(connection.connectの問題)

私のディレクトリ構造:

project_root/ 
    mysql/   
     connection.js 
    node_modules/ 
     .... 
    server.js 
    package.json 

connection.jsの内容は、以下のようになり、エラーが「connection.connect」との行で発生します。私はこれを知っているので、 "function(err)"を実行しているコールバック関数は "Mysql connection error"を出力し、コンソールで "null"を出力するためです。

var fs = require('fs'); 
var mysql = require('mysql'); 

var connection_data = JSON.parse(fs.readFileSync('../config/mysql.json', 'utf8')); 

// JSON.stringify(connection_data) 
// ‌{"host":"127.0.0.1","port":3306,"user":"root","passwd":"xxxxxxxxxxx","db":"mydatabase"} 

var connection = mysql.createConnection({ 
    host : connection_data['host'], 
    user : connection_data['user'], 
    password : connection_data['passwd'], 
    database: connection_data['db'], 
    charset: "utf8_general_ci", 
    socketPath : '/tmp/mysql.sock' 
}); 

export_connection = connection.connect(function(err) { 
    console.log("Mysql connection error"); 
    console.log(err); 
}); 

module.exports = export_connection 

他のリンクでは、以下に示すコマンドラインでmysqlステータスを調べることを推奨しています。私はNode.js mysql接続をステータスに表示されているのと同じソケットに接続するように設定しています。

mysql> status 
-------------- 
mysql Ver 14.14 Distrib 5.7.18, for osx10.12 (x86_64) using EditLine wrapper 

Connection id:  237509 
Current database: 
Current user:  [email protected] 
SSL:   Not in use 
Current pager:  stdout 
Using outfile:  '' 
Using delimiter: ; 
Server version:  5.7.18 MySQL Community Server (GPL) 
Protocol version: 10 
Connection:  Localhost via UNIX socket 
Server characterset: latin1 
Db  characterset: latin1 
Client characterset: utf8 
Conn. characterset: utf8 
UNIX socket:  /tmp/mysql.sock 
Uptime:   1 day 8 hours 9 min 18 sec 

connection_data [ 'ホスト']は127.0.0.1、connection_data [ 'ユーザ']であることに留意されたいルートとconnection_data [ 'DB']は、既存のデータベースに対応しています。

答えて

0

本当に接続していませんか?あなたはこれを書いています:

connection.jsの内容は以下に示されており、「connection.connect」という行にエラーが発生しています。私はこれを知っているので、 "function(err)"を実行しているコールバック関数は "Mysql connection error"を出力し、コンソールで "null"を出力するためです。

Node.jsのコールバック関数は、標準的な形式を持つ:通常

function (err, result) { ... } 

コールバックが呼び出しが成功したか失敗したかどうかをと呼ばれています。呼び出しが失敗すると、errは何かに設定されます(つまり、ではなく、null)。あなたの場合、errnullです。これは接続が成功したことを示します。

コールバック関数は、通常、次のようになります:

function (err, result) { 
    if (err) { 
     // ...do something with the error, like reporting it to the 
     // user or throwing an exception 
     return; 
    } 

    // otherwise, everything is cool. Query the database (or 
    // do something else) 
} 

をお使いの場合には、それが実際に成功した接続のように見えます。次のステップは、クエリ&が動作するかどうかを確認することです。失敗した場合は、エラーの詳細で質問を更新してください。

+0

私の間違い。コードは実際に動作します。なぜ私はそのエラーメッセージを表示するのか分かりません。 – jacksonSmith

+0

あなたのコードがエラーメッセージを表示するのは、それがあなたのコールバックが行うことです(そしてあなたのコールバックはすべてそうです)。 'err'が設定されていない場合(例えば、' undefined'または 'null'の場合)、エラーがなかったことを意味します。 – Kryten

関連する問題