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

## mariadbの導入

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

#### npmの場合
```
npm install mariadb
```

#### yarnの場合
```
yarn add mariadb
```

#  javascriptでの記述

## パッケージの読み込み

```javascript
const mariadb = require('mariadb');
```

## DTBへの接続するための設定処理
```javascript
const pool = mariadb.createPool({
    host: 'localhost', 
    user: '',              //データーベースを操作するユーザー名を記述する
    password: '',          //操作するユーザーのパスワードを記述する
    database: '',          //操作するデーターベース名を記述
    // 同時接続数の制限（任意）をかけるために記述
    //connectionLimit: 5
});
```
## データベースを操作する基本コード

```javascript


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);
	});

```

## データベースから情報を取得する処理
```javascript
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);
	});
});
```

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


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

<form action="/create" method="post">
    <input type="text" name="itemName" />　<!---「itemName」と名前で値を送信する -->
    <input type="submit" value="作成する" />
</form>
```

##### データを受信するために必要な記述
データを送信してもurlエンコードを適切に解析できるようにしないとエラーを発して受信ができない。
パッケージの読み込みの後に記述
```javascript
//記述することによりexpressアプリがurlエンコードされたデータを適切に解析できるようになる。
app.use(express.urlencoded({extended: false}));
```
データを受信し登録するコード
```javascript
//[/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へ２重登録を防いでいる
			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'

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

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

```