##ルーティング
ルーティングとは:アクセスするパスに応じて、表示する内容や行う処理を変えること
##Node.jsでのルーティングの記述方法
・Node.jsアプリのファイル構成
├──app.js //アプリのメインのバックエンド処理
├── public //UI(css,クライアントサイドのjavascript)を記述
│ └── css
│ └── style.css
├── routes //ルーティング処理を記述
│ └── index.js
└── views //特定のパスにアクセスした時に引き渡すファイル。テンプレートエンジンを用いて記述
├── home.ejs
├── index.ejs
├── login.ejs
└── register.ejs
・app.js
'use strict'
//共通変数
const path = require('path');
const morgan = require('morgan'); //ターミナルにHTTPの処理をリアルタイムで表示させる
const express = require('express');
const app = express();
const router = require('./routes/index.js') //ルーティング処理を書いたファイルをモジュールとして読み込む
//POSTのミドルウェア
app.use(express.urlencoded());
app.use(express.json());
//テンプレートエンジンの設定
const viewsPath = path.join(__dirname, './views')
const publicDirectoryPath = path.join(__dirname, './public')
app.set('view engine', 'ejs');
app.set('views', viewsPath)
app.use(express.static(publicDirectoryPath));
app.use(morgan({format: 'dev', immediate: true}));
//ルーティング処理
app.use('/', router);
app.listen(3001, () => {
console.log('server is up on port 3001')
})
・index.js
const express = require('express');
const router = express.Router(); //ルーティング処理を記述していく
router
.get('', (req,res) => {
res.render('index')
})
.get('/login', (req,res) => {
res.render('login')
})
.get('/register', (req,res) => {
res.render('register')
})
//homeにPOSTするときの処理
.post('/home', function(req, res) {
const _username = req.body.username;
//POSTが作動しているか確かめる為にconsoleする
console.log(111)
// usernameを渡す + views/home/index.jsを参照する
res.render('home', {username: _username})
});
module.exports = router;
##やってはいけない実装方法
もしも、「/login」パスにアクセスした時の処理だけをindex.jsに書いていたとしたら?
//ルーティング処理を書いたファイルをモジュールとして読み込む
const router = require('./routes/index.js')
(省略)
app.get('', (req,res) => {
res.render('index')
});
app.use('/login', router);
こうすると、/loginのパスにアクセスした時に、エラーになる。
ルーティング処理を書いたファイルをモジュールとして読み込む時のapp.useでは、第一引数を'/'のパスにする必要がある