モデル - Express

モデルを作成する

モデルをファイルを分けて作成します。

ディレクトリ構成

  • example
    • ...
    • controllers
      • ContentController.js
    • models
      • User.js
    • ...
    • routes
      • content.js
    • views
      • users
        • index.ejs
    • app.js
    • ...

ファイル内容

app.js

「 app.js 」ファイルに以下を追記します。

var usersRouter = require('./routes/users');
app.use('/users', usersRouter);

db.js

const mysql = require('mysql2/promise');

const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  database: 'users',
  password: 'password',
});

module.exports = pool;

models/User.js

const mysql = require('mysql2/promise');
const pool = require('../db');

module.exports = {
  allUser: () => {
    return new Promise ((resolve, reject) => {
      (async () => {
        try {
          const [results, fields] = await pool.query('SELECT * FROM users');
          resolve(results);
        } catch (err) {
          console.log(err);
        }
      })();
    });
  }
}

routes/users.js

var express = require('express');
var router = express.Router();
const Users = require('../models/User');

router.get('/', function(req, res, next) {
  Users.allUser().then((result) =>{
    let data = { users: result };
    res.render('users/index', data);
  });
});

module.exports = router;

views/users/index.ejs

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>User - index</title>
</head>
<body>
  <div id="header">
    <h1>User Index</h1>
  </div>
  <div id="content">
    <table>
        <tr>
          <th>ID</th>
          <th>Name</th>
          <th>Age</th>
        </tr>
        <% for(let i in users){ %>
          <% let obj = users[i]; %>
          <tr>
            <td><%= obj.id %></td>
            <td><%= obj.name %></td>
            <td><%= obj.age %></td>
          </tr>
        <% } %>
    </table>
  </div>
</body>
</html>