Node.jsでMySQLにアクセスする
mysql - https://www.npmjs.com/package/mysql、または mysql2 - https://www.npmjs.com/package/mysql2を使うことでNode.jsからMySQLを操作できます。
本記事では非同期処理を簡単に扱えるmysql2を使ったサンプルになります。
インストール
mysql2
npm install mysql2
使用時
const mysql = require('mysql2');
参考:mysql
npm install mysql
使用時
const mysql = require('mysql');
mysql2 の使い方
poolをPromiseとして扱うために、util
を利用します。
接続情報
色々ありますが、最低限下記があればOK。
host
- 接続するデータベースのホスト名user
- 認証するMySQLユーザーpassword
- 上記MySQLユーザーのパスワードdatabase
- 接続するデータベース
参照するデータベースの内容
id | name |
---|---|
U0001 | user 001 |
U0002 | user 002 |
サンプル
"use strict";
const mysql = require('mysql2');
// pool を Promise にするために必要.
const util = require('util');
/* 接続情報. */
const mySqlPoolOptions = {
host: 'localhost',
user: 'node-user',
password: '00000000',
database: 'node_sample_db',
};
async function insertUserAsync(id, name) {
const pool = mysql.createPool(mySqlPoolOptions);
pool.query = util.promisify(pool.query);
try {
const res = await pool.query('INSERT INTO users (id, name) VALUES (?, ?)', [id, name]);
return res.affectedRows == 1;
} catch (err) {
console.log(err);
return false;
} finally {
pool.end();
}
}
async function selectUsersAsync() {
const pool = mysql.createPool(mySqlPoolOptions);
pool.query = util.promisify(pool.query);
try {
const rows = await pool.query('SELECT * FROM users');
for (let row of rows) {
console.log(${row.id} : ${row.name}
);
}
} catch (err) {
console.log(err);
} finally {
pool.end();
}
}
insertUserAsync('U0003', 'user 003').then(result => {
console.log(result);
return selectUsersAsync();
}).then(() => {
console.log("finish");
});
実行結果
true
U0001 : user 001
U0002 : user 002
U0003 : user 003
finish
上記サンプルにおけるrowのプロパティやクエリーでVIEWを扱う場合、ビュー名やカラム名の大文字・小文字は厳密に区別されるので注意してください。
変更行数について
DELETE
の行数は戻り値(res)のプロパティaffectedRows
に格納されるINSERT
の行数は戻り値(res)のプロパティaffectedRows
に格納されるUPDATE
の行数は戻り値(res)のプロパティaffectedRows
を参照する
→UPDATE
時の内容に前回との差分が無い場合、プロパティのchangedRows
は値が0
になるため
INSERT時のオートID
戻り値(res)のプロパティinsertId
に格納されます。