LoginSignup
0
0

node.jsでmariaDBを使用するためのコーディング参考程度

Last updated at Posted at 2024-05-01

mariadbの導入

mariaDBを使用するためにmariadbをインストールする

npmの場合

npm install mariadb

yarnの場合

yarn add mariadb

javascriptでの記述

パッケージの読み込み

const mariadb = require('mariadb');

DTBへの接続するための設定処理

const pool = mariadb.createPool({
    host: 'localhost', 
    user: '',              //データーベースを操作するユーザー名を記述する
    password: '',          //操作するユーザーのパスワードを記述する
    database: '',          //操作するデーターベース名を記述
    // 同時接続数の制限(任意)をかけるために記述
    //connectionLimit: 5
});

データベースを操作する基本コード



pool.getConnection()
        .then(conn => {
            conn.query('データベースを操作するsql文を記述する場所')
                .then(results => {   //データーベースからデーターを取得できた場合の処理
                 
                })
                .catch(error => {   //データーベースの接続を失敗したときの処理
                    console.log(error);
                })
                .finally(() => { //最後に必ず行う処理
					//接続を終了する
					if(conn) conn.end();
				});

	}).catch((error: any) => {
		console.log(error);
	});

データベースから情報を取得する処理

app.get('/index', (req, res) => {

	pool.getConnection()
		.then(conn => {

			conn.query('SELECT * FROM items')
				.then(results => { //mysqlからデータを取得できた場合の処理

        			//itemsという変数に値を保持する
                     res.render('index.ejs', {items: results});

				})
				.then((error: any) => { //errorを取得したときの処理
					console.log(error);
				})
				.finally(() => { //最後に必ず行う処理
					//接続を終了する
    				if(conn) conn.end();
				});

    })
    .catch((error: any) => {
		console.log(error);
	});
});

データーベースへ情報を登録する処理

サイトの送信フォームからデータの送信コード


<form action="/create" method="post">
    <input type="text" name="itemName" /> <!---「itemName」と名前で値を送信する -->
    <input type="submit" value="作成する" />
</form>
データを受信するために必要な記述

データを送信してもurlエンコードを適切に解析できるようにしないとエラーを発して受信ができない。
パッケージの読み込みの後に記述

//記述することによりexpressアプリがurlエンコードされたデータを適切に解析できるようになる。
app.use(express.urlencoded({extended: false}));

データを受信し登録するコード

//[/new]でsubmitされた値をデーターベースへ登録する処理
app.post('/create',(req , res) => { //データを受け取るのでpostになる。

	//送信フォームか送られた値を受け取る変数
    //送信元はname="itemName"で送られてきたので
    //req.body」の後は「itemName」にしないと受信できない。
	const name = req.body.itemName;

	//SQL分を登録する変数
     //挿入のためのinsert分
	const query = `INSERT INTO items (name) VALUES ('${name}')`;

	pool.getConnection()
	.then( conn => {

		conn.query(query)
		.then(() => {		//データーを挿入出来たらindexページへ移動する

            //redirectでSQLへ2重登録を防いでいる
			res.redirect('/index');
		})
		.catch(error =>{	//挿入中にエラーが発生したらエラーを表示する
			console.error('データの挿入中にエラーが発生しました:',error);
			res.redirect('/index');
		})
    	.finally(() => {    //データーベースとの接続を切る処理
			if(conn) conn.end();
		});

	})
	.catch((error: any) => {
		console.error("MariaDBへの接続中にエラーが発生しました:", error);
	});
});

データを削除する処理

送信された値を受け取るわけではないので'req.body'ではなく'req.params'

//削除する処理
app.post('/delete/:id', (req:any, res:any) => {

    //削除したいデータ'/delete/:id'でアクセスされた':id'を受け取る
    //送信された値を受け取るわけではないので'req.body'ではなく'req.params'
	const id = req.params.id;

	const query = `DELETE FROM items WHERE id = '${id}'`;

	pool.getConnection()
	.then( conn => {

		conn.query(query)
		.then(() => {		//データーを削除出来たらindexページへ移動する

            //redirectでSQLへ2重処理を防いでいる
			res.redirect('/index');
		})
		.catch(error =>{	//削除中にエラーが発生したらエラーを表示する
			console.error('データの削除中にエラーが発生しました:',error);
			res.redirect('/index');
		})
    	.finally(() => {    //データーベースとの接続を切る処理
			if(conn) conn.end();
		});

	})
	.catch((error: any) => {
		console.error("MariaDBへの接続中にエラーが発生しました:", error);
	});
});

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0