node-mysql_node.js を使用した Windows Node.js MySQL 環境のセットアップに関するチュートリアル
はしがき
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' } ]
接続プールにより、自動再接続の問題が解決されました。今後の開発では可能な限りプーリングを使用できるようになります。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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

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

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

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