【JavaScript】Node.jsでMySQLに接続してみよう【Node.js】

Node.js
目次

概要

dockerで作成されたubuntuのコンテナ内に、Node.jsとMySQLをインストールし接続を行います。

dockerでのubuntu環境の構築については、こちらを参考にしていただけると幸いです。

完成したもの

ブラウザからNode.jsにアクセスすると下記のようになりました!

成功です!!!

実際に運用する場合は、SQLインジェクション攻撃に備える必要あります。

細心の注意を払って実装しましょう。

前提環境

下準備として、ubuntu上にNode.jsの環境を構築する必要があります。

1.Node.jsのインストール

下記コマンドを実行し、インストールします。

※rootでubuntuにログインしている場合は、sudoを省略してください。

sudo apt install nodejs

成功した場合は、下記コマンドでバージョンが表示されるます。

node -v

うまく行かない場合は、ubuntuのアップデートを実行してみましょう。

sudo apt update
sudo apt-get upgrade

2.npmのインストール

sudo apt install npm

windowsの記事になってしまいますが、こちらの記事も参考にしてみてください。

Node.js準備編

Express準備編

※関連記事を読んでいただいた前提で話が進みます。
手短に説明すると、、、

1.ディレクトリhomeにserverという名前のディレクトリを作成してます。
2.serverディレクトリでnpm init -yを実行しています。
3.npm install expressを実行しています。

MySQLのインストール

早速下記のコマンドを入力し、インストールしましょう。

sudo apt install mysql-server

上手くいかなかった場合、アップデートをして実行してみてください。

sudo apt update
sudo apt-get upgrade

それではもダメな場合は、この記事の下にコメントをしていただくかAIに聞いてみましょう。

MySQLの設定

1.ダミーデータの準備

ubuntuにwgetとunzipをインストールしていない場合はダウンロードしてください。

wget ダウンローダ

sudo apt install wget

unzip 解凍ソフト

sudo apt install unzip

MySQL公式ダミーデータsakilaをダウンロードします。(ubuntuの場合はコマンドでダウンロードします)

wget 'http://downloads.mysql.com/docs/sakila-db.zip'

ダウンロードしたファイルを解凍します。

unzip sakila-db.zip

MySQLを起動後、MySQL内に入ります。

※パスワードは初期の状態だと、adminのはずです。

sudo service mysql start
sudo mysql -u root -p

ダウンロードしたダミーデータsakilaを読み込みます。

source sakila-db/sakila-schema.sql;
source sakila-db/sakila-data.sql;

2.接続用のユーザーの追加

適切な権限のユーザーでないと、Node.jsからMySQLに接続できません。

適切ではない場合、、、

Error: ER_DBACCESS_DENIED_ERROR: Access denied for 〜以下省略〜
と表示されます。

セキュリティ的に専用のユーザーを作っておこくことが望ましいです。

create user 'username'@'localhost' identified with mysql_native_password by 'password';
GRANT ALL PRIVILEGES ON sakila.* TO 'username'@'localhost';

Node.jsのモジュールmysqlのインストール

MySQLに接続する際に必要になる、モジュールmysqlをインストールします。

ディレクトリserverで実行してください。

下記のコマンドを実行するのみです。

npm install mysql

成功すると、package.jsonに項目か追加されているはずです。

index.jsのコード

const express = require("express");
const mysql = require('mysql');
const app = express();

const connection = mysql.createConnection({

  host: 'localhost',
  user: 'test',
  port: '3306',
  password: 'password',
  database: 'sakila'

});

connection.connect((err) => {

  if (err) {

    console.log(err);
    
  } else {

    console.log('Connected to MySQL');
    
  }

});

app.get("/", async function (req, res) {

    res.setHeader("Content-Type", "text/plain; charset=utf-8");
  
    connection.query('SELECT * FROM  actor where actor_id=1', (err, rows) => {

      if (err) {

        console.log(err);

      } else {
        
        console.log(rows);
        res.send(rows);
        
      }

    });

});

app.listen(8080,function() {

    console.log("Listening on localhost port 8080 host 4050");

});

まとめ

無事に接続ができましたでしょうか?

わかりにくい箇所などありましたら、コメントをいただければ幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
目次