ホームページ ウェブフロントエンド jsチュートリアル node-mysql_node.js を使用した Windows Node.js MySQL 環境のセットアップに関するチュートリアル

node-mysql_node.js を使用した Windows Node.js MySQL 環境のセットアップに関するチュートリアル

May 16, 2016 pm 03:12 PM
javascript mysql node.js windows

はしがき

MySQL は一般的に使用されているオープン ソース データベース製品であり、通常は無料データベースの最初の選択肢となります。 NPM リストを確認したところ、Nodejs には MySQL にアクセスできるライブラリが 13 個あり、felixge/node-mysql が最も人気のあるプロジェクトのようだったので、それを試してみることにしました。

名前に注意してください。「felixge/node-mysql」は「node-mysql」ではありません。このエピソードはインストール部分で紹介されます。

目次

  • node-mysql の概要
  • MySQL テスト ライブラリを構築する
  • node-mysql のインストール
  • node-mysql の使用

1.node-mysql の概要

felixge/node-mysql は、JavaScript を使用して純粋な Nodejs で実装された MySQL クライアント プログラムです。 felixge/node-mysql は、MySQL 上の Nodejs の基本操作をカプセル化しており、100% MIT パブリック ライセンスです。

プロジェクトアドレス: https://github.com/felixge/node-mysql

2. MySQL テスト ライブラリを確立します

MySQL テスト ライブラリをローカルに作成します:nodejs

~ mysql -uroot -p
mysql> CREATE DATABASE nodejs;
mysql> SHOW DATABASES;
+--------------------+
| Database      |
+--------------------+
| information_schema |
| mysql       |
| nodejs       |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

ログイン後にコピー
mysql> GRANT ALL ON nodejs.* to nodejs@'%' IDENTIFIED BY 'nodejs';
mysql> GRANT ALL ON nodejs.* to nodejs@localhost IDENTIFIED BY 'nodejs';
ログイン後にコピー

MySQL に再度ログインします

C:\Users\Administrator>mysql -unodejs -p
Enter password: ******

mysql> SHOW DATABASES;
+--------------------+
| Database      |
+--------------------+
| information_schema |
| nodejs       |
| test        |
+--------------------+
3 rows in set (0.00 sec)

ログイン後にコピー


mysql> USE nodejs
Database changed
ログイン後にコピー

新しいユーザーテーブルを作成します

CREATE TABLE t_user(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(16) NOT NULL ,
create_date TIMESTAMP NULL DEFAULT now()
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE UNIQUE INDEX t_quiz_IDX_0 on t_user(name);
ログイン後にコピー


mysql> SHOW TABLES;
+------------------+
| Tables_in_nodejs |
+------------------+
| t_user      |
+------------------+
1 row in set (0.04 sec)
ログイン後にコピー

3.node-mysql のインストール

私のシステム環境

win7 64ビット
Nodejs:v0.10.5
Npm:1.2.19
MySQL:サーバー バージョン: 5.6.11 MySQL コミュニティ サーバー (GPL)
プロジェクトを作成します:nodejs-node-mysql

~ D:\workspace\javascript>mkdir nodejs-node-mysql
~ D:\workspace\javascript>cd nodejs-node-mysql
~ D:\workspace\javascript\nodejs-node-mysql>npm install node-mysql
node-mysql@0.2.0 node_modules\node-mysql
├── better-js-class@0.1.2
├── cps@0.1.7
├── underscore@1.5.2
└── mysql@2.0.0-alpha9 (require-all@0.0.3, bignumber.js@1.0.1)
ログイン後にコピー

ここでちょっとしたエピソードをご紹介します

「node-mysql」をインストールした後、package.json ファイルを開くと、プロジェクトのアドレスが

であることがわかります。

https://github.com/redblaze/node-mysql.git
依存関係からも分かるようにmysqlライブラリに依存しており、felixge/node-mysqlのカプセル化となっています。

ノード-mysql1

このプロジェクトのスターは 0 なので、フォークも 0 です。したがって、テストに時間を費やして felixge/node-mysql パッケージを再インストールするつもりはありません。

node-mysql を再インストールします

~ D:\workspace\javascript\nodejs-node-mysql>rm -rf node_modules
~ D:\workspace\javascript\nodejs-node-mysql>npm install mysql@2.0.0-alpha9
npm http GET https://registry.npmjs.org/mysql/2.0.0-alpha9
npm http 200 https://registry.npmjs.org/mysql/2.0.0-alpha9
npm http GET https://registry.npmjs.org/mysql/-/mysql-2.0.0-alpha9.tgz
npm http 200 https://registry.npmjs.org/mysql/-/mysql-2.0.0-alpha9.tgz
npm http GET https://registry.npmjs.org/require-all/0.0.3
npm http GET https://registry.npmjs.org/bignumber.js/1.0.1
npm http 304 https://registry.npmjs.org/require-all/0.0.3
npm http 304 https://registry.npmjs.org/bignumber.js/1.0.1
mysql@2.0.0-alpha9 node_modules\mysql
├── require-all@0.0.3
└── bignumber.js@1.0.1
ログイン後にコピー

今回はここまで、開発を進めていきましょう!

ノード プログラムの起動ファイルを作成します: app.js

最初のテスト

~ vi app.js
ログイン後にコピー
ログイン後にコピー
var mysql = require('mysql');
var conn = mysql.createConnection({
  host: 'localhost',
  user: 'nodejs',
  password: 'nodejs',
  database:'nodejs',
  port: 3306
});
conn.connect();
conn.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
  if (err) throw err;
  console.log('The solution is: ', rows[0].solution);
});
conn.end();

ログイン後にコピー

ノードを実行

~ D:\workspace\javascript\nodejs-node-mysql>node app.js
The solution is: 2
ログイン後にコピー

このようにして、Nodejs を MySQL に接続できるようにします。

4.node-mysql の使用

ここで、node-mysql API で共通のテストを実行します。

テーブルの新規作成、削除、変更、チェックが行われました
接続プールの構成
MySQL が切断されて再接続される
接続プールのタイムアウトテスト
1) テーブルの新規性、削除、変更を確認します
app.js を変更する

~ vi app.js
ログイン後にコピー
ログイン後にコピー
var mysql = require('mysql');
var conn = mysql.createConnection({
  host: 'localhost',
  user: 'nodejs',
  password: 'nodejs',
  database: 'nodejs',
  port: 3306
});
conn.connect();

var insertSQL = 'insert into t_user(name) values("conan"),("fens.me")';
var selectSQL = 'select * from t_user limit 10';
var deleteSQL = 'delete from t_user';
var updateSQL = 'update t_user set name="conan update" where name="conan"';

//delete
conn.query(deleteSQL, function (err0, res0) {
  if (err0) console.log(err0);
  console.log("DELETE Return ==> ");
  console.log(res0);

  //insert
  conn.query(insertSQL, function (err1, res1) {
    if (err1) console.log(err1);
    console.log("INSERT Return ==> ");
    console.log(res1);

    //query
    conn.query(selectSQL, function (err2, rows) {
      if (err2) console.log(err2);

      console.log("SELECT ==> ");
      for (var i in rows) {
        console.log(rows[i]);
      }

      //update
      conn.query(updateSQL, function (err3, res3) {
        if (err3) console.log(err3);
        console.log("UPDATE Return ==> ");
        console.log(res3);

        //query
        conn.query(selectSQL, function (err4, rows2) {
          if (err4) console.log(err4);

          console.log("SELECT ==> ");
          for (var i in rows2) {
            console.log(rows2[i]);
          }
        });
      });
    });
  });
});

//conn.end();

ログイン後にコピー

コンソール出力:

D:\workspace\javascript\nodejs-node-mysql>node app.js
ログイン後にコピー
DELETE Return ==>
{ fieldCount: 0,
 affectedRows: 2,
 insertId: 0,
 serverStatus: 34,
 warningCount: 0,
 message: '',
 protocol41: true,
 changedRows: 0 }
INSERT Return ==>
{ fieldCount: 0,
 affectedRows: 2,
 insertId: 33,
 serverStatus: 2,
 warningCount: 0,
 message: '&Records: 2 Duplicates: 0 Warnings: 0',
 protocol41: true,
 changedRows: 0 }
SELECT ==>
{ id: 33,
 name: 'conan',
 create_date: Wed Sep 11 2013 12:09:15 GMT+0800 (中国标准时间) }
{ id: 34,
 name: 'fens.me',
 create_date: Wed Sep 11 2013 12:09:15 GMT+0800 (中国标准时间) }
UPDATE Return ==>
{ fieldCount: 0,
 affectedRows: 1,
 insertId: 0,
 serverStatus: 2,
 warningCount: 0,
 message: '(Rows matched: 1 Changed: 1 Warnings: 0',
 protocol41: true,
 changedRows: 1 }
SELECT ==>
{ id: 33,
 name: 'conan update',
 create_date: Wed Sep 11 2013 12:09:15 GMT+0800 (中国标准时间) }
{ id: 34,
 name: 'fens.me',
 create_date: Wed Sep 11 2013 12:09:15 GMT+0800 (中国标准时间) }
ログイン後にコピー

ノードの非同期の性質により、上記は継続的な操作であり、コードは断片的に書かれます。非同期ライブラリを通じて上記のコードをカプセル化できます。記事を参照してください: Nodejs 非同期プロセス制御 Async

2) 接続プールの構成

ファイルを追加: app-pooling.js

~ vi app-pooling.js

ログイン後にコピー
var mysql = require('mysql');
var pool = mysql.createPool({
  host: 'localhost',
  user: 'nodejs',
  password: 'nodejs',
  database: 'nodejs',
  port: 3306
});

var selectSQL = 'select * from t_user limit 10';

pool.getConnection(function (err, conn) {
  if (err) console.log("POOL ==> " + err);

  conn.query(selectSQL,function(err,rows){
    if (err) console.log(err);
    console.log("SELECT ==> ");
    for (var i in rows) {
      console.log(rows[i]);
    }
    conn.release();
  });
});

ログイン後にコピー

コンソール出力:

D:\workspace\javascript\nodejs-node-mysql>node app-pooling.js
ログイン後にコピー
SELECT ==>
{ id: 39,
 name: 'conan update',
 create_date: Wed Sep 11 2013 13:41:18 GMT+0800 (中国标准时间) }
{ id: 40,
 name: 'fens.me',
 create_date: Wed Sep 11 2013 13:41:18 GMT+0800 (中国标准时间) }
ログイン後にコピー

3) MySQL が切断され、再接続されました

3 種類のエラーをそれぞれシミュレートします

a. ログインパスワードが間違っています
b. データベースがダウンしています
c. データベース接続タイムアウト
新しいファイル: app-reconnect.js

~ vi app-reconnect.js

ログイン後にコピー
var mysql = require('mysql');
var conn;
function handleError () {
  conn = mysql.createConnection({
    host: 'localhost',
    user: 'nodejs',
    password: 'nodejs',
    database: 'nodejs',
    port: 3306
  });

  //连接错误,2秒重试
  conn.connect(function (err) {
    if (err) {
      console.log('error when connecting to db:', err);
      setTimeout(handleError , 2000);
    }
  });

  conn.on('error', function (err) {
    console.log('db error', err);
    // 如果是连接断开,自动重新连接
    if (err.code === 'PROTOCOL_CONNECTION_LOST') {
      handleError();
    } else {
      throw err;
    }
  });
}
handleError();

ログイン後にコピー

a. シミュレーションパスワードが間違っています

パスワードの変更: 「nodejs11」

コンソール出力。

D:\workspace\javascript\nodejs-node-mysql>node app-reconnect.js
ログイン後にコピー
ログイン後にコピー
error when connecting to db: { [Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'nodejs'@'localhost' (using pass
rd: YES)]
 code: 'ER_ACCESS_DENIED_ERROR',
 errno: 1045,
 sqlState: '28000',
 fatal: true }
error when connecting to db: { [Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'nodejs'@'localhost' (using pass
rd: YES)]
 code: 'ER_ACCESS_DENIED_ERROR',
 errno: 1045,
 sqlState: '28000',
 fatal: true }
ログイン後にコピー

b. データベースのダウンタイムをシミュレートします
ノードを通常どおり起動し、mysqld プロセスを強制終了します。

コンソール出力。


D:\workspace\javascript\nodejs-node-mysql>node app-reconnect.js
ログイン後にコピー
ログイン後にコピー
db error { [Error: read ECONNRESET]
 code: 'ECONNRESET',
 errno: 'ECONNRESET',
 syscall: 'read',
 fatal: true }

Error: read ECONNRESET
  at errnoException (net.js:884:11)
  at TCP.onread (net.js:539:19)

ログイン後にコピー

この例外により、ノード プログラムが直接強制終了されます。

c. シミュレーション接続タイムアウト、PROTOCOL_CONNECTION_LOST
root アカウントに切り替え、MySQL の wait_timeout パラメータを変更して、10 ミリ秒のタイムアウトに設定します。

~ mysql -uroot -p
mysql> show variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set (0.00 sec)

mysql> set global wait_timeout=10;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 10  |
+---------------+-------+
1 row in set (0.00 sec)

ログイン後にコピー

ファイル app-reconnection.js を変更し、最後にコードを追加します

~ vi app-reconnection.js

ログイン後にコピー
function query(){
  console.log(new Date());
  var sql = "show variables like 'wait_timeout'";
  conn.query(sql, function (err, res) {
    console.log(res);
  });
}

query();
setInterval(query, 15*1000);

ログイン後にコピー

プログラムは 15 秒ごとにクエリを実行します。

コンソール出力

D:\workspace\javascript\nodejs-node-mysql>node app-reconnect.js
Wed Sep 11 2013 15:21:14 GMT+0800 (中国标准时间)
[ { Variable_name: 'wait_timeout', Value: '10' } ]
db error { [Error: Connection lost: The server closed the connection.] fatal: true, code: 'PROTOCOL_CONNECTION_LOST' }
Wed Sep 11 2013 15:21:28 GMT+0800 (中国标准时间)
[ { Variable_name: 'wait_timeout', Value: '10' } ]
db error { [Error: Connection lost: The server closed the connection.] fatal: true, code: 'PROTOCOL_CONNECTION_LOST' }
Wed Sep 11 2013 15:21:43 GMT+0800 (中国标准时间)
[ { Variable_name: 'wait_timeout', Value: '10' } ]
ログイン後にコピー

独自のプログラムが「PROTOCOL_CONNECTION_LOST」例外をキャッチし、データベースに自動的に再接続しました。

4) MySQL 接続プールのタイムアウト テスト

wait_timeout の問題については、接続を再度テストしてみましょう。

app-pooling.js ファイルを変更します

var mysql = require('mysql');
var pool = mysql.createPool({
  host: 'localhost',
  user: 'nodejs',
  password: 'nodejs',
  database: 'nodejs',
  port: 3306
});

var selectSQL ="show variables like 'wait_timeout'";

pool.getConnection(function (err, conn) {
  if (err) console.log("POOL ==> " + err);

  function query(){
    conn.query(selectSQL, function (err, res) {
      console.log(new Date());
      console.log(res);
      conn.release();
    });
  }
  query();
  setInterval(query, 5000);
});

ログイン後にコピー

コンソール出力:

D:\workspace\javascript\nodejs-node-mysql>node app-pooling.js
Wed Sep 11 2013 15:32:25 GMT+0800 (中国标准时间)
[ { Variable_name: 'wait_timeout', Value: '10' } ]
Wed Sep 11 2013 15:32:30 GMT+0800 (中国标准时间)
[ { Variable_name: 'wait_timeout', Value: '10' } ]
Wed Sep 11 2013 15:32:35 GMT+0800 (中国标准时间)
[ { Variable_name: 'wait_timeout', Value: '10' } ]
ログイン後にコピー

接続プールにより、自動再接続の問題が解決されました。今後の開発では可能な限りプーリングを使用できるようになります。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PIノードティーチング:PIノードとは何ですか? PIノードをインストールしてセットアップする方法は? PIノードティーチング:PIノードとは何ですか? PIノードをインストールしてセットアップする方法は? Mar 05, 2025 pm 05:57 PM

ピン張りのノードの詳細な説明とインストールガイドこの記事では、ピネットワークのエコシステムを詳細に紹介します - PIノードは、ピン系生態系における重要な役割であり、設置と構成の完全な手順を提供します。 Pinetworkブロックチェーンテストネットワークの発売後、PIノードは多くの先駆者の重要な部分になり、テストに積極的に参加し、今後のメインネットワークリリースの準備をしています。まだピン張りのものがわからない場合は、ピコインとは何かを参照してください。リストの価格はいくらですか? PIの使用、マイニング、セキュリティ分析。パインワークとは何ですか?ピン競技プロジェクトは2019年に開始され、独占的な暗号通貨PIコインを所有しています。このプロジェクトは、誰もが参加できるものを作成することを目指しています

gate.ioの最新バージョンのダウンロード gate.ioの最新バージョンのダウンロード Mar 05, 2025 pm 07:51 PM

暗号通貨の旅を開始するには、gate.ioアプリをダウンロードする必要がありますか?このガイドでは、iOS、Android、およびWindowsデバイスの最新バージョンのダウンロードステップを詳しく説明しています。公式Webサイトにアクセスして、ダウンロードリンクを見つけて、デバイスに基づいて適切なオプションを選択してください。 iOSの場合、App Storeに直接送られ、AndroidおよびWindowsユーザーは手動インストールのためにAPKまたはインストーラーをダウンロードします。インストールしたら、アプリを起動してアカウントを設定して、暗号通貨の世界に足を踏み入れることができます。

ビットコインには、どのようなディスク視聴ソフトウェアが使用されていますか ビットコインには、どのようなディスク視聴ソフトウェアが使用されていますか Mar 17, 2025 pm 04:27 PM

適切なビットコイン市場視聴ソフトウェアを選択することは重要です。投資家はリアルタイムで市場の状況を把握し、より賢い投資決定を行うのに役立ちます。この記事では、個人のニーズの評価(取引頻度、分析の深さ、情報のニーズと予算)、ソフトウェアタイプの選択(交換インターフェイス、プロフェッショナルソフトウェア、市場/アプリ)、コア機能的考慮事項(データの信頼性、チャートツール、カスタム設定、コミュニティコミュニケーション、プラットフォームの互換性)、および方向の推奨事項(成熟財務プラットフォーム、コミュニティの推奨プラットフォーム、コミュニティの推奨プラットフォーム、コミュニティの推奨プラットフォーム、コミュニティの推奨)をカバーする方法を導きます。 最後に、さらにいくつかのソフトウェアを試して、それを比較して、ニーズに最適なツールを選択することをお勧めします。 ソフトウェアは補助ツールにすぎないことを忘れないでください。また、お客様の責任で投資する際には注意する必要があります。

node.js環境で403を返すサードパーティインターフェイスの問題を解決する方法は? node.js環境で403を返すサードパーティインターフェイスの問題を解決する方法は? Mar 31, 2025 pm 11:27 PM

node.js環境で403を返すサードパーティインターフェイスの問題を解決します。 node.jsを使用してサードパーティのインターフェイスを呼び出すと、403を返すインターフェイスから403のエラーが発生することがあります...

OKXトレーディングプラットフォームをダウンロードする方法 OKXトレーディングプラットフォームをダウンロードする方法 Mar 26, 2025 pm 05:18 PM

OKXトレーディングプラットフォームは、モバイルデバイス(AndroidおよびiOS)およびコンピューター(WindowsとMacOS)からダウンロードできます。 1.Androidユーザーは、公式WebサイトまたはGoogle Playからダウンロードでき、セキュリティ設定に注意を払う必要があります。 2。IOSユーザーは、App Storeからダウンロードするか、公式発表に従って他の方法を取得できます。 3.コンピューターユーザーは、対応するシステムのクライアントを公式Webサイトからダウンロードできます。インストール後、ダウンロードして登録するときは必ず公式チャネルを使用し、ログインし、セキュリティ設定を使用してください。

PHPがMySQLに接続された後、ページは空白です。無効なDIE()関数の理由は何ですか? PHPがMySQLに接続された後、ページは空白です。無効なDIE()関数の理由は何ですか? Apr 01, 2025 pm 03:03 PM

PHPがMySQLに接続した後、ページは空白になり、DIE()関数が失敗する理由。 PHPとMySQLデータベースの間の接続を学習するとき、あなたはしばしばいくつかの混乱することに遭遇します...

バイナンスダウンロードポータル バイナンスダウンロードポータル Mar 04, 2025 pm 05:33 PM

記事の紹介Binanceダウンロードポータルは、デバイスとオペレーティングシステムによって異なります。最初にデバイスの種類を明確にしてから、公式Webサイトbinance.com(ドメイン名を確認するために注意)にアクセスし、公式Webサイトの顕著な位置にある「ダウンロード」ボタンを探し、さまざまなオペレーティングシステムに従ってダウンロードを選択します。コンピューターバージョンのインストールプログラムは、AndroidがIOS検索を確認し、App Storeからダウンロードする必要があります。ダウンロード後、アカウントに作成またはログインし、アカウント情報とキーを保持することに注意する必要があります。

安全で信頼できるビットゲットアプリケーションのダウンロードアプリの無料インストール 安全で信頼できるビットゲットアプリケーションのダウンロードアプリの無料インストール Mar 04, 2025 pm 10:27 PM

安全で信頼性の高いデジタル資産取引サービスを提供するために、Bitgetアプリケーションをダウンロードしてください。高度なプラットフォームを使用すると、ポートフォリオを簡単に管理し、スムーズでユーザーフレンドリーな取引体験を楽しむことができます。 Bitgetアプリケーションは、最高の実行価格を確実に得るために、高い流動性と詳細な市場を提供します。私たちは、ユーザーのために安全で透明な取引環境を作成し、常にあなたの資金のセキュリティを優先することを約束しています。

See all articles