Node.jsでDB接続をする時、MySQL8系とnpmのmysqlライブラリだとパスワード認証ができないのでmysql2ライブラリを使うと思います
mysql2のDB操作は記事によって書き方が違う、(当時のバージョンと違うから)全然動かない…!と苦労したので書いておきます
DB接続
async-awaitでDB操作をする mysql2/promise
を利用します
// require('mysql2')でコールバック関数を使う方法だと動かなかった
var mysql = require('mysql2/promise');
let client
/**
* DB接続生成
* DB操作時に接続、クローズをする
*/
const createConnection = async() => {
client = await mysql.createConnection({
host: "localhost",
port: 3306,
user: "userName",
password: "password",
database: "dbName"
})
}
データ取得
データ取得するときは execute()
を使います(query()
だとデータ取得できなかったので注意!)
/**
* ユーザー一覧取得
* @returns ユーザー情報
*/
const getUserList = async() => {
await createConnection()
const [rows, fields] = await client.execute("select * from users")
await client.end()
return rows
}
rows
にはこんな感じでデータが入ってきます
[ { id: 2, name: 'admin' }, { id: 3, name: 'developer' } ]
データ登録
データ登録は query()
を使うと動きます
/**
* ユーザー登録
*/
const registerUser = async(userName) => {
await createConnection()
const [result, filelds] = await client.query(
`INSERT INTO users VALUES (0, '${userName}')`
)
await client.end()
return result
}
result
には登録結果が入ってきます
ResultSetHeader {
fieldCount: 0,
affectedRows: 1,
insertId: 5,
info: '',
serverStatus: 2,
warningStatus: 0
}
SELECTは execute()
、INSERTは query()
と覚えましょう(ややこしい)