6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Node.js+mysql2でデータ取得&登録

Last updated at Posted at 2022-12-14

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() と覚えましょう(ややこしい)

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?