はじめに:以前のNodejs Hello、Worldに続いて!他の強力な機能も見ることができます。 NodeJSコミュニティの現在の人気と多数のエンジニアのサポートにより、多数のモジュールが徐々に導入されています。
コンテンツ:NodejsとMySQLの相互作用を示しています。
現時点では、mysqlのモジュールをnodejsに追加する必要があります。現時点では、前の章で述べたNPM(ノードパッケージマネージャー)がアクティブになっています。
mysqlモジュールをnodejsにインストールします。
コードコピーは次のとおりです。
$ npmはmysqlをインストールします
JSスクリプトmysqltest.js
コードコピーは次のとおりです。
// mysqltest.js
// mysqlモジュールをロードします
var client = require( 'mysql')。クライアント、
client = new Client()、
//作成されるデータベース名
test_database = 'nodejs_mysql_test'、
//作成されるテーブル名
test_table = 'test';
//ユーザー名
client.user = 'root';
//パスワード
client.password = 'root';
//接続を作成します
client.connect();
client.query( 'データベースの作成'+test_database、function(err){
if(err && err.number!= client.error_db_create_exists){
エラーを投げます。
}
});
//コールバックが提供されていない場合、エラーは「エラー」として放出されます
//クライアントによるイベント
client.query( 'use'+test_database);
client.query(
「テーブルの作成」+test_table+
'(id int(11)auto_increment、'+
'タイトルVarchar(255)、'+
「テキストテキスト」、+
「作成されたDateTime」+
「プライマリキー(ID))」
);
client.query(
'Intering'+test_table+''+
'Set Title =?、Text =?、created =?'、
['Super Cool'、 'これは素敵なテキスト'です '、' 2010-08-16 10:00:23 ']]
);
var query = client.query(
'Intering'+test_table+''+
'Set Title =?、Text =?、created =?'、
[「別のエントリ」、「2つのエントリがより良いテストを行うため」、「2010-08-16 12:42:15」]
);
client.query(
'select * from'+test_table、
function selectcb(err、results、fields){
if(err){
エラーを投げます。
}
console.log(results);
console.log(fields);
client.end();
}
);
スクリプトを実行します
コードコピーは次のとおりです。
ノードmysqltest.js
効果は次のとおりです。
// mysql-demo.js
const mysql = require( 'mysql2/promise'); //約束をサポートするmysql2を使用します
require( 'dotenv')。config(); //環境変数管理
//接続プールを使用してパフォーマンスを向上させます
const pool = mysql.createpool({
ホスト:process.env.db_host || 「localhost」、
ユーザー:process.env.db_user || '根'、
パスワード:process.env.db_password || '根'、
データベース:process.env.db_name || 'nodejs_mysql_test'、
waitforconnections:本当、
ConnectionLimit:10、
Queuelimit:0
});
//テーブル構造の定義(DDL管理)
const table_schema = `
存在しない場合はテーブルを作成します(投稿)
id intプライマリキーAuto_increment、
タイトルvarchar(255)nullではありません、
コンテンツテキスト、
created_at dateTimeデフォルトcurrent_timestamp、
updated_at datetime on update current_timestamp
)エンジン= InnoDBデフォルトcharset = utf8mb4 collate = utf8mb4_unicode_ci;
`;
//ビジネスロジックカプセル化
クラスpostdao {
コンストラクター(プール){
this.pool = pool;
}
async initialize(){
this.pool.execute(table_schema)を待っています。
console.log( 'テーブル検証/作成');
}
async createpost(post){
const [result] = await this.pool.execute(
`投稿に挿入(タイトル、コンテンツ)
値(?、?) `、
[post.title、post.content]
);
return {... post、id:result.insertid};
}
async getposts(page = 1、pagesize = 10){
const offset =(page -1) * pagesize;
const [rows] = await this.pool.execute(
`投稿から *を選択します
created_at descによる注文
制限?オフセット? `、
[ページサイズ、オフセット]
);
行を返します。
}
async transactionDemo(){
const conn = await this.pool.getConnection();
試す {
conn.begintransaction();
//トランザクション操作1
conn.executeを待っています(
`投稿に挿入(タイトル、コンテンツ)
値(?、?) `、
['トランザクション1'、 '原子操作デモ']
);
//トランザクション操作2
const [result] = await conn.execute(
`投稿を更新するコンテンツを設定=?
ここでタイトル=? `、
['更新されたコンテンツ'、 'トランザクション1']
);
await conn.commit();
返品結果;
} catch(err){
conn.rollback();
エラーを投げます。
} ついに {
conn.release();
}
}
}
//実行の例
(async()=> {
試す {
const dao = new Postdao(プール);
dao.initialize();
//新しい記事を作成します
const newpost = await dao.createpost({{
タイトル:「Modern Node.js mysql Guide」、
コンテンツ:「データベース操作のベストプラクティス」
});
console.log( '作成されたpost:'、newPost);
//ページネーションクエリ
const posts = await dao.getposts();
console.log( '最初のページ結果:'、投稿);
//トランザクションデモ
const txResult = await dao.transactiondemo();
console.log( 'トランザクションが完了しました:'、txResult);
//最終クエリ
const finalposts = await dao.getposts();
console.log( '最終投稿:'、finalposts);
} catch(err){
console.error( 'アプリケーションエラー:'、err);
} ついに {
await pool.end();
}
})();