2
3

More than 3 years have passed since last update.

Node.jsでルーティングを行う方法と、やってはいけないこと

Last updated at Posted at 2020-06-17

ルーティング

ルーティングとは:アクセスするパスに応じて、表示する内容や行う処理を変えること

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では、第一引数を'/'のパスにする必要がある

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3