概要
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");
});
まとめ
無事に接続ができましたでしょうか?
わかりにくい箇所などありましたら、コメントをいただければ幸いです。