Node.jsでMySQL
Node.jsでMySQL
Node.jsからMySQLにアクセスする方法です。
なんか検索すると色々なコードがあって混乱したんですが、結局以下のように落ち着いたのでメモって置きます。
インストール
npm install mysql2
mysql2/promise を使うのが吉のようです。
インポート
ソース上で利用するには最初にimportします。
import * as mysql from 'mysql2/promise'
requireは最近流行らないので使いません。
SELECT
async function selectExample() {
var conn = null
try {
conn = await mysql.createConnection({
host: ホスト,
port: ポート,
user: ユーザー名,
password: パスワード,
database: データベース
}
const [rows] = await conn.execute('select fld1, fld2 from mytable')
return rows
} catch (error) {
console.log(error)
throw error
} finally {
if (conn)
await conn.end()
}
}
await selectExample()
mysql2/promiseの関数は基本非同期なのでasync/await使います。
selectでexecuteなのがモヤモヤ。
INSERT/UPDATAE
async function insertExample() {
var conn = null
try {
conn = await mysql.createConnection({
host: ホスト,
port: ポート,
user: ユーザー名,
password: パスワード,
database: データベース
}
await conn.beginTransaction()
const [result] = await conn.query("insert into mytable (fld1, fld2) values ('abc', 'def')")
const id = result.insertId // 採番されたPKが取得できる
await conn.commit()
return id
} catch (error) {
console.log(error)
if (conn)
await conn.rollback()
throw error
} finally {
if (conn)
await conn.end()
}
}
await insertExample()
updateはconn.queryの中のSQLをupdateに変えるだけ。
更新件数を取得したい場合は result.affectedRows で取得できます。
insertだと何故かqueryなのがモヤモヤ。
トランザクションも上記のようにすれば機能します。
O/Rマッパに慣れ過ぎててこういうの久しぶり。
物凄く面倒。Node.js向けのO/Rマッパでスタンダードなやつありませんかね。
コメント
コメントを投稿