6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Node.js(Express)とMySQLを使用してAPIを構築をしていく

Last updated at Posted at 2022-03-30

Express.jsとは

node.jsで利用できるWebアプリケーションフレームワーク
javaScriptだけでフロントエンド開発もバックエンド開発もどちらも書けるというメリットがある

個人的には素のSQLが書けたりディレクトリ構成がシンプルなので初学者におすすめできるフレームワークだと思っている

node.jsのインストールがまだの方

express.jsはnode.jsのフレームワークなのでode.jsが使えないといけません。
node.jsのインストール方法は様々ですが、nmv等バージョンを切り替えられるものをインストールしておくとよいと思う

API構築

今回はタイトル通りデータベースにmysqlを利用してExpressのAPIを作成していく

$ mkdir express-project  #任意のフォルダ名
$ cd express-project
$ npm init -y
$ npm install express mysql nodemon cors
ライブラリ 説明
express webアプリ開発に使うフレームワーク
mysql node.jsからmysqlに接続するために必要
nodemon コードに変更があった場合自動でサーバーを再起動してくれる
コードを修正するたびにサーバーを立て直す必要がなくなるのでかなり便利
cors オリジン間リソース共有を許可するために必要

※CORSについて気になる方はこちらの記事をチェック

次にルートディレクトリにindex.jsを作成して下記のように記述する

index.js
//インストールしたパッケージ
const express = require('express')
const mysql = require('mysql')
const cors = require('cors')

// ポート番号
const port = 8000

const app = express() // expressを実行
app.use(express.json()) //jsonのリクエスト/レスポンスを正しく受け取る為に必要
app.use(cors()) // corsを有効にする

// mysqlの接続に必要な情報を記載する(それぞれ自身のmysql情報を入力していく)
const con = mysql.createConnection({
  host: 'localhost',
  user: 'user',
  password: 'password',
  database: 'db_name'
})

// mysql接続
con.connect((err) => {
  if (err) throw err
  console.log('Connected')
})

// GETリクエストテスト
app.get('/', (req, res) => {
  return res.json('hello express')
})

//portを開く
app.listen(port, () => {
  console.log(`Example app listening on port ${port}!`)
})

これでlocalhost:8000/にアクセスするとhello expressと書かれたjsonを返す超簡単なAPIが完成
実際に動かしてみる

node index.js

※必ずindex.jsが保存されているディレクトリで実行すること!

ブラウザでhttp://localhost:8000/にアクセスして下記のような画面になれば成功

image.png

ブラウザからlocalhost:8000の'/'にアクセス(GETリクエスト)したので、app.get('/', (req, res) …)が実行され、
return res.json('hello express')('hello express' をjson形式でレスポンス)された

mysqlの中に保存されているデータを返すAPIの作成

今回は以下のようなデータを取得するAPIを作成する

DB名:shop
table名:customers

image.png

./index.jsを下記の通り編集

index.js
//インストールしたパッケージ
const express = require('express')
const mysql = require('mysql')
const cors = require('cors')

// ポート番号
const port = 8000

const app = express() // expressを実行
app.use(express.json()) //jsonのリクエスト/レスポンスを正しく受け取る為に必要
app.use(cors()) // corsを有効にする

// mysqlの接続に必要な情報を記載する(それぞれ自身のmysql情報を入力していく)
const con = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: '',
  database: 'shop'
})

// mysql接続
con.connect((err) => {
  if (err) throw err
  console.log('Connected')
})

// GETリクエストテスト用
app.get('/', (req, res) => {
  return res.json('hello express')
})

// ~~~~~~ここから追加~~~~~~

// mysqlからデータを取得して表示させる
app.get('/sql-data', (req, res) => {
  const sql = 'select * from customers'

  // con.query()でsql文を実行して結果をresultに格納する
  con.query(sql, (err, result) => {
    // エラーが発生した場合はエラーメッセージを返す
    if(err) {
      return res.status(400).json({"error": err.message})
    }
    // エラーが発生しなかった場合はsql文で取得したデータを返す
    return res.json(result)
  })
})

// ~~~~~追加はここまで~~~~~

//portを開く
app.listen(port, () => {
  console.log(`Example app listening on port ${port}!`)
})

もう一度index.jsを実行する

node index.js

ブラウザでhttp://localhost:8000/sql-dataにアクセスして下記のような画面になれば成功

image.png

無事mysqlに保存されているデータを取得することができました

nodemonの使い方

package.jsonを下記の通り編集

package.json
{
  "name": "express-lesson",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon index.js"
   },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "cors": "^2.8.5",
    "express": "^4.17.3",
    "mysql": "^2.18.1",
    "nodemon": "^2.0.15"
  }
}

package.jsonの"scripts: {}"内に"test": "nodemon index.js"と追記しました
この状態でnpm startと実行するとnodemonを用いてindex.jsを実行できます

npm startでindex.jsを実行中にファイルの中身を編集して保存を押すと自動でindex.jsが再実行されるので
変更の度いちいちnode index.jsを実行しなくてもよくなります
すごく便利!

6
3
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
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?