モデル - Express.js

  • 作成日:
  • 最終更新日:2025/10/11

モデルを作成する

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

ディレクトリ構成は、以下のようにします。

  • 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>