なんだかGoodVibes

日々の勉強メモです。

【Node】MYSQL操作の基本(CRUD)

今回は前回の続き。
基本的な操作を行ってみましょう。

nandakagoodvibes.hatenablog.com



概要

今回は、簡易登録を作ってみました。
登録する情報は

  • ID
  • 名前
  • メールアドレス
  • 年齢


構成は以下。 今回紹介するのはrouter。

-- app.js
-- public
    -- style.css
-- router
    -- index.js
    -- allshow.js
    -- create.js
    -- read.js
    -- update.js
    -- delete.js
-- views
    -- index.ejs
    -- allshow.ejs
    -- create.ejs
    -- read.ejs
    -- update.ejs
    -- delete.ejs
    -- head.ejs

機能は以下。

  • すべてのレコードを表示する
  • 新規でレコードを追加
  • 選択したIDの情報を表示する
  • 選択したIDの情報を編集する
  • 選択したIDの情報を削除する


INDEX(トップページ)

このページからAllSHOW、CREATEに遷移します。

var express = require('express');
var router = express.Router();

router.get('/',(req, res, next) => {

    res.render('index.ejs', {
        title: 'INDEX',
        conten:''
    });
});

module.exports = router;


ALLSHOW(すべてのレコードを表示する)

すべてのレコードを表示します。

var mysql = require('mysql');
var express = require('express');
var router = express.Router();

const mysql_setting = {
    host     : 'ホスト',
    user     : 'ユーザー',
    password : 'パスワード',
    database : '対象のデータベース'
};

router.get('/',(req, res, next) => {

    var connection = mysql.createConnection(mysql_setting);
    connection.connect();

    connection.query('SELECT * from テーブル名',
        function (error, results, fields) {
        if (error == null) {
            var data = {title:'ALLSHOW',content:results};
            res.render('allshow.ejs', data);
        }
    });

    connection.end();
});

module.exports = router;


CREATE(新規に作成する)

新規にレコードを作成します。

var mysql = require('mysql');
var express = require('express');
var router = express.Router();

const mysql_setting = {
    host     : 'ホスト',
    user     : 'ユーザー',
    password : 'パスワード',
    database : '対象のデータベース'
};

router.get('/', (req, res, next) => {
    var data = {
        title: 'CREATE',
        content: '新しいレコードを入力:'
    }

    res.render('create.ejs', data);
});

router.post('/', (req, res, next) => {
    var n = req.body.name;
    var m = req.body.mail;
    var a = req.body.age;
    var data = {'name':n, 'mail':m, 'age':a};

    var connection = mysql.createConnection(mysql_setting);
    connection.connect();

    connection.query('insert into テーブル名 set ?', data,
            function(error, results, fields) {
        res.redirect('/');
    });

    connection.end();
});

module.exports = router;


READ(指定したIDの情報を表示)

ALLSHOWページのフォームに入力されたIDの
情報を表示します。

var mysql = require('mysql');
var express = require('express');
var router = express.Router();

const mysql_setting = {
    host     : 'ホスト',
    user     : 'ユーザー',
    password : 'パスワード',
    database : '対象のデータベース'
};

router.post('/', (req, res, next) => {
    var id = req.body["id"];

    var connection = mysql.createConnection(mysql_setting);
    connection.connect();

    connection.query('SELECT * from テーブル名 where id = ?', id,
        function(error, results, fields) {
            if (error == null) {
                var data = {
                    title : 'READ',
                    content : 'id = ' + id + 'のレコード',
                    mydata : results[0]
                }

                res.render('read.ejs', data);
            }
        }
    );

    connection.end();
});

module.exports = router;


UPDATE(レコードの更新)

指定されたIDのレコードを編集します。
アクセス時は.getの処理でレコードの情報を表示し
.postで更新処理を行います。

var mysql = require('mysql');
var express = require('express');
var router = express.Router();

const mysql_setting = {
    host     : 'ホスト',
    user     : 'ユーザー',
    password : 'パスワード',
    database : '対象のデータベース'
};

router.get('/', (req, res, next) => {
    var id = req.query.id;

    var connection = mysql.createConnection(mysql_setting);
    connection.connect();

    connection.query('SELECT * from テーブル名 where id = ?', id,
        function(error, results, fields) {
            if (error == null) {
                var data = {
                    title : 'UPDATE',
                    content : 'id = ' + id + 'のレコード',
                    mydata : results[0]
                }

                res.render('update.ejs', data);
            }
        }
    );

    connection.end();
});

router.post('/', (req, res, next) => {
    var id = req.body["id"];
    var n = req.body["name"];
    var m = req.body["mail"];
    var a = req.body["age"];
    var data = {'name':n, 'mail':m, 'age':a};

    var connection = mysql.createConnection(mysql_setting);
    connection.connect();

    connection.query('update テーブル名 set ? where id = ?', [data, id],
        function (error, results, fields) {
            res.redirect('/');
        }
    );

    connection.end();
});

module.exports = router;

DELETE(レコードの削除)

指定されたIDのレコードを削除します。
アクセス時は.getの処理でレコードの情報を表示し
.postで指定されたレコードの削除処理を行います。

var mysql = require('mysql');
var express = require('express');
var router = express.Router();

const mysql_setting = {
    host     : 'ホスト',
    user     : 'ユーザー',
    password : 'パスワード',
    database : '対象のデータベース'
};

router.get('/', (req, res, next) => {
    var id = req.query.id;

    var connection = mysql.createConnection(mysql_setting);
    connection.connect();

    connection.query('SELECT * from テーブル名 where id = ?', id,
        function(error, results, fields) {
            if (error == null) {
                var data = {
                    title : 'DELETE',
                    content : 'id = ' + id + 'のレコード',
                    mydata : results[0]
                }

                res.render('delete.ejs', data);
            }
        }
    );

    connection.end();
});

router.post('/', (req, res, next) => {
    var id = req.body["id"];

    var connection = mysql.createConnection(mysql_setting);
    connection.connect();

    connection.query('delete from テーブル名 where id = ?', id,
        function(error, results, fields) {
            if (error != null){
                console.log(error.message);
            }

            res.redirect('/');
        }
    );

    connection.end();
});

module.exports = router;


まとめ

作ってみましたが、改善すべき点がいくつもありますね。
mysql_settingなど、重複しています。
1箇所で設定してそれを使うようにしたほうがいいですね。
あと、入力値チェックも今回していないでのそれも行いたいな。
以上です。