初めに
nodejs + mysql でベックエンドのコード書いているが、徐々にコートが長くなってカテゴリごとに分ける必要性を感じた。
ここで、routerという機能を使ってより管理しやすく環境を整えることを書いておく。
環境
window 10
mysql 8.0.31
ejs: 3.1.8
express: 4.18.2
Dir
dir
├─public
index.html
users.html
├─routes
users.js
└─views
server.js
Code
routesで分ける前
server.js
const express = require('express');
const mysql = require('mysql');
const app = express();
app.set('view engine', 'ejs')
const con = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '12345678',
database: 'nodejs',
dateStrings: "date",
multipleStatements: true
});
con.connect((err) => {
if (err) {
console.log('error connecting: ' + err.stack);
return;
}
console.log('success');
;
});
});
app.get('/', function (req, res) {
res.render('index.ejs')
})
// このusersに関連したapiをカテゴリ別で分けたい
app.get('/users', (req, res) => {
const sql = "select * from users"
con.query(sql, function (err, result, fields) {
if (err) throw err;
res.render('users.ejs', { users: result })
})
})
分けた後
server.js
...
//DBをusers.jsで使用するためにexportする
module.exports = con
// 元々のusersに関するすべてのコードの代わりにこれを書いておく
app.use('/', require('./routes/users.js'));
/routes/users.js
var router = require('express').Router();
const con = require('./../server.js')
//appの代わりにrouterを使用する
router.get('/users', (req, res) => {
const sql = "select * from users"
con.query(sql, function (err, result, fields) {
if (err) throw err;
res.render('users.ejs', { users: result })
})
})
//server.jsで使用するためにexportする
module.exports = router;
おわりに
自分が不便を感じるところはだいたい、誰かが便利な機能を作っておくんだと実感した部分ですね。
計画的にapiを書くことによって将来的に管理しやすいプロジェクトが出来上がりそうです。