DBアプリのコードサンプル(サーバーアプリ編)

プログラムのコードは 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);  // データベース接続を閉じる
});

以上


コメントを残す