🍏
Node.js + MySQLで作るREST API
RDBを使用したAPIを作ってみた
普段は、Firestoreを使ってるんですけど、開発現場の多くはMySQLやPostgreSQLを使っているので、モバイル用のAPIを過去に作ってたサンプルコードを参考に、mysql2のパッケージを使って作り直してみました。
こちらが完成品
✅環境構築
環境構築の手順
- 📦プロジェクトを作成する
mkdir rest-api-mysql2
- 📦package.jsonファイルを作成
npm init -y
- 📦node.jsのフレームワークをインストールする
npm i express
- 📦mysqlと接続するパッケージをインストールする
npm install mysql2
- 📦corsのパッケージをインストールする
npm i cors
- 📦nodemonをインストールする
npm install -g nodemon
nodemon.jsonを作成して、index.jsを監視するファイルを作成する
{
"watch": ["index.js"],
"ext": "js",
"ignore": ["node_modules"],
"exec": "node index.js"
}
- MySQLにデータベースとテーブルを作成する
-- データベースの作成
CREATE DATABASE MyData;
-- データベースの切り替え
use MyData;
-- animalsテーブルの作成
CREATE TABLE animals (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
);
-- animalsテーブルにデータを挿入
INSERT INTO animals (name) VALUES
('dog'),('cat'),('penguin'),
('lax'),('whale'),('ostrich');
-- animalsテーブルのデータを表示
SELECT * FROM animals;
-- テーブルの各カラムの情報を表示します。
DESC animals;
-- EXIT または \qでMySQLを終了
- node.jsを起動するコマンド
nodemon
アプリのソースコード
index.js
const express = require("express");
const app = express();
const mysql = require("mysql2");
const cors = require("cors");
// corsを使うと、クロスオリジンのエラーが出なくなる
app.use(cors());
// express.json()を使うと、req.bodyを使えるようになる
app.use(express.json());
// MySQLの接続情報
const db = mysql.createConnection({
user: "root",// 作成したユーザー名
host: "localhost",// host名
password: "1234",// 作成したユーザーのパスワード
database: "MyData",// 作成したデータベース名
port: 3306, // MySQLのデフォルトポート
});
// データの追加
app.post("/animals", (req, res) => {
const name = req.body.name;
const query = "INSERT INTO animals (name) VALUES (?)";
db.query(query, [name], (err, result) => {
if (err) {
console.log(err);
res.status(500).send({ error: "Error inserting data into database" });
} else {
res.status(200).json({ message: "Value Inserted" });
}
});
});
// データの取得
app.get("/animals", (req, res) => {
const query = "SELECT * FROM animals";
db.query(query, (err, result) => {
if (err) {
console.log(err);
res.status(500).send("Error retrieving data from database");
} else {
res.status(200).json(result);
}
});
});
// データの更新
app.put("/animals/:id", (req, res) => {
const id = req.params.id;
const name = req.body.name;
const query = "UPDATE animals SET name = ? WHERE id = ?";
db.query(query, [name, id], (err, result) => {
if (err) {
console.log(err);
res.status(500).send("Error updating data in database");
} else {
res.status(200).send("Value Updated");
}
});
});
// データの削除
app.delete("/animals/:id", (req, res) => {
const id = req.params.id;
const query = "DELETE FROM animals WHERE id = ?";
db.query(query, [id], (err, result) => {
if (err) {
console.log(err);
res.status(500).send("Error deleting data from database");
} else {
res.status(200).send("Value Deleted");
}
});
});
// サーバーの起動
const port = 3001;
app.listen(port, () => {
console.log(`Yey, your server is running on port ${port}`);
});
エンドポイントへアクセスする
こちらのURLにアクセスすると、ブラウザにJSONのデータで、MySQLから取得したデータが表示されるはずです。POST, PUT, DELETEもしたので、表示されているデータの内容は少し違います。
ポストマンを使ってみる
デスクトップ版のポストマンというアプリを使用して、HTTP通信を行います。デスクトップ版はアカウントの登録をしなくても使えていました。
node.jsが起動しているときに、HTTP通信を行うと、MySQLのデータを操作することができるようになります。
まとめ
以前作っていたものを使いまわせると思っていたのですが、新しいパッケージに変えないと、MySQLと接続ができませんでした。今度はこれを使ってFlutterと通信をする実験をやってみたいなと思っております。
Discussion