ルーティング
ルーティングとは:アクセスするパスに応じて、表示する内容や行う処理を変えること
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'//共通変数constpath=require('path');constmorgan=require('morgan'); //ターミナルにHTTPの処理をリアルタイムで表示させるconstexpress=require('express');constapp=express();constrouter=require('./routes/index.js') //ルーティング処理を書いたファイルをモジュールとして読み込む//POSTのミドルウェアapp.use(express.urlencoded());app.use(express.json());//テンプレートエンジンの設定constviewsPath=path.join(__dirname,'./views')constpublicDirectoryPath=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
constexpress=require('express');constrouter=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に書いていたとしたら?
//ルーティング処理を書いたファイルをモジュールとして読み込むconstrouter=require('./routes/index.js')(省略)app.get('',(req,res)=>{res.render('index')});app.use('/login',router);
こうすると、/loginのパスにアクセスした時に、エラーになる。
ルーティング処理を書いたファイルをモジュールとして読み込む時のapp.useでは、第一引数を'/'のパスにする必要がある