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