プログラムのコードは JavaScript で書きます。サーバーは Node.js と Express フレームワークを使います。
初期設定
appオブジェクトを作って、CORSセキュリティ対策をして 3000番ポートで待ち受けします。
/* 1. expressモジュールをロードし、インスタンス化してappに代入。*/
var express = require("express");
var mysql = require('mysql');
var app = express();
var port = 3000;
/* ログ用 */
var log4js = require('log4js');
var logger = log4js.getLogger();
// all < trace < debug < info < warn < error < fatal < mark < off
logger.level = 'all';
// logger.debug(''); logger.warn(''); logger.error('');
/* CORS 定義: 自分自身からの受付は許可する */
const allowedOrigins = ['http://じぶんのサーバー名:8080'];
app.use((req, res, next) => {
const origin = req.headers.origin;
if (allowedOrigins.includes(origin)) {
res.header('Access-Control-Allow-Origin', origin);
} else {
res.header('Access-Control-Allow-Origin', ''); // 許可されていないオリジンの場合は空にする
}
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
next();
});
/* 2. listen()メソッドを実行して3000番ポートで待ち受け。*/
var server = app.listen(port, function(){
console.log("Node.js is listening to PORT:" + server.address().port);
});
/* 3. 以後、アプリケーション固有の処理 */
// ルートAPIは、アプリが起動しているかどうか検査するステータス応答とする
app.get('/', (req, res) => {
let strTemp = 'OK. BackendKanoApp is running (^_^)/';
res.send( strTemp );
});
DBに接続する関数
データベースに接続するための関数を作ります
// --------------------------------------
// MySQLデータベースの接続情報を設定
// --------------------------------------
function connectDatabse() {
const db = mysql.createConnection({
host: 'localhost',
user: 'ユーザー名',
password: 'パスワード',
database: 'データベース名'
});
// データベースに接続
db.connect((err) => {
if (err) {
logger.error('データベースに接続できない connectDatabase in app.js');
throw err;
}
});
return db;
}
DBを閉じる関数
データベース接続を閉じるための関数を作ります
// --------------------------------------
// データベース接続を閉じる
// --------------------------------------
function closeDatabse(db) {
db.end((err) => {
if (err) {
logger.error('データベース接続を閉じるときにエラー closeDatabase in app.js');
throw err;
}
});
}
機能1.データを取得するアプリ
データベースから全てのレコードを読み込みます。
// --------------------------------------
// レコードを取得する
// --------------------------------------
app.get('/get', (req, res) => {
const db = connectDatabse(); // データベースに接続
// データを読み出すクエリ
let sql = 'SELECT * FROM mydata';
db.query(sql, (err, results) => {
if (err) {
logger.error('データベース読み出しに失敗 SELECT for API /get in app.js');
throw err;
}
res.json(results);
});
closeDatabse(db); // データベース接続を閉じる
});
機能2.新しいデータを追加
データベースに新しいレコードを1個追加します。
// --------------------------------------
// 新しいレコードを作成する
// --------------------------------------
app.get('/put', (req, res) => {
const db = connectDatabse(); // データベースに接続
// データを書き込むクエリ
let myName = req.query.name;
let myData = req.query.data;
sql = "INSERT INTO mydata (name, data) VALUES ('"
+ myName + "', '"
+ myData + "');";
db.query(sql, (err, results) => {
if (err) {
logger.error('データベース書き込みに失敗 INSERT for API /put in app.js');
throw err;
}
res.json(results);
logger.warn('DBに書き込み成功しました 🎉 INSERT for API /put in app.js');
//デバッグ:console.error('DBに書き込み成功しました 🎉', err);
});
closeDatabse(db); // データベース接続を閉じる
});
機能3.データを削除
データベースからIDで指定したレコードを1個削除します。
// --------------------------------------
// レコードを削除する
// --------------------------------------
app.get('/delete_name', (req, res) => {
const db = connectDatabse(); // データベースに接続
// データを削除するクエリを定義
let myID = req.query.id;
sql = "DELETE FROM mydata WHERE id=" + myID;
// データ削除を実行
db.query(sql, (err, results) => {
if (err) {
logger.error('データベースのレコード削除に失敗 DELETE for API /put in app.js');
throw err;
}
res.json(results);
});
closeDatabse(db); // データベース接続を閉じる
});
機能4.データを更新
データベースのIDを指定してレコードを変更します。
// --------------------------------------
// レコードを変更する
// --------------------------------------
app.get('/update', (req, res) => {
const db = connectDatabse(); // データベースに接続
// データを更新のクエリを定義
let myID = req.query.id;
let myName = req.query.name;
let myData = req.query.data;
sql = "UPDATE mydata SET "
+ "Name='" + myName + "', "
+ "Data='" + myData + "' "
+ "WHERE ID=" + myID +";";
// データ更新を実行
db.query(sql, (err, results) => {
if (err) {
logger.error('レコードの書き換えに失敗 UPDATE for API /put in app.js');
throw err;
}
res.json(results);
});
closeDatabse(db); // データベース接続を閉じる
});
以上