Syntax Error.

[Sy] Node.js から MySQL に接続してデータを insert するサンプル

2018/01/19

Node.js から mysql パッケージ を利用して、 MySQL に接続してランダムな数値を insert するサンプルコードです。

1. テスト用のデータベースとテーブルを MySQL に準備

MySQL にログインして、 node_test という名前のデータベースを作成します。

$ mysql -u root -p
Enter password: [パスワードを入力]

・
・
・
mysql> create database node_test default character set utf8;
Query OK, 1 row affected (0.03 sec)

mysql> use node_test
Database changed

続けて、 scores という「id、value」のシンプルなレコードを持つテーブルを作ります。

mysql> create table scores (
    ->   id int(11) not null auto_increment,
    ->   value float,
    ->   primary key (id)
    -> ) engine=InnoDB default character set=utf8;
Query OK, 0 rows affected (0.05 sec)

mysql> show columns from scores;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO   | PRI | NULL    | auto_increment |
| value | float   | YES  |     | NULL    |                |
+-------+---------+------+-----+---------+----------------+
2 rows in set (0.02 sec)

今回は、このテーブルに対してランダムな数値を insert していきます。

2. JavaScript(Node.js) から MySQL に接続するコードを書く

作業用のディレクトリを適当につくります。

$ mkdir node_mysql
$ cd node_mysql

MySQL に接続するために mysql というパッケージを npm でインストールしておきます。

$ npm install mysql

$ npm list --depth=0
/Users/utano320/Documents/Develop/node_mysql
└── mysql@2.15.0

app.js というファイル名でコードを作成します。

$ vim app.js
(app.js)

const mysql = require('mysql');

const con = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: '[パスワード]',
  database: 'node_test'
});

// 接続
con.connect((err) => {
  if (err) throw err;

  console.log('connected to mysql');
});


let data = {
  value: Math.random()
};

// insert
con.query('insert into scores set ?', data, (err, res)  => {
  if (err) throw err;
  console.log(data.value);
});

// 切断
con.end((err) => {
  if (err) throw err;

  console.log('disconnected to mysql');
});

3. 実行&確認

$ node app.js
connected to mysql
0.5453194169743927
disconnected to mysql

0.5453194169743927 というランダムな数値が1件 scores テーブルに insert したというログが出ました。

MySQL側でテーブルのデータを確認してみます。

mysql> select * from scores;
+----+----------+
| id | value    |
+----+----------+
|  1 | 0.545319 |
+----+----------+
1 row in set (0.01 sec)

insert されていれば成功です。