Node.js의 라우팅 이야기 (MVC 구현까지)

node.js커녕 웹계 거의 초보자 지식밖에 없었는데, 집중적으로 2개월 정도 독학으로 배워왔기 때문에 알게 된 것을 쓰자.

이번에는 라우팅 이야기입니다.

node.js 프로젝트의 기본



이번에는 프레임 워크에 Express를 사용하고 있습니다.
기본적으로 app.js는 모든 처리를 지시합니다. (bin/www도 있습니다만...)

app.js -> router -> Model(View)
같은 느낌으로 처리를 나눌 수도 있습니다.
라고 할까, 그것이 기본입니다.

다음 예에서는 마지막 부분에서 라우터에 처리를 지시합니다.

app.js
const createError = require('http-errors');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const bodyPaser = require("body-parser");
const fs = require("fs");

const index = require('./routes/index');

coonst app = express();

// view engine setup
const.set('views', path.join(__dirname, 'views'));
const.set('view engine', 'pug');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', index);


라우팅이란 무엇입니까?



간단히 말하면 특정 http 액세스가 왔을 때 어떻게 처리를 하는가 하는 것입니다.
get(URL에의 액세스)가 오면 어떤 처리를 하면, post(부가 정보를 가진 액세스)가 오면 어떤 처리를 하면,
어플리케이션에 있어서의 기본적인 조작을 담당하는 처리입니다.

routes/index.js
//getの例
router.get('/index', (req, res) => {
  res.send('index');
});

//postの例
router.post('/', (req, res) => {
  req.body.title;
  res.send('index');
}


views/index.html
 <!--postの例 -->
<form method="post" action="/">
<input type="submit" name="title">

<!--getの例-->
<a href="/">


라우팅 필요



처음에 작은 제품이라고 대패를 분리할 필요를 전혀 느끼지 않습니다.

왜냐하면 나누지 않아도 움직이니까.

어쩌면 app.js에 모든 처리를 써도 움직입니다!
그럼 왜 라우터도 나눠? 라고 생각합니다.

단지 기능을 추가해 가는 동안에 http 액세스의 분기의 수도 늘어나 갑니다. ('/top/add/id'처럼)
그러한 때에 하나의 라우터에 기술하는 것은 처리를 알기 어려워, 재검토도 곤란합니다.

따라서 라우터는 분리해야합니다.

app.js

app.use('/login', login); //ログインおよびログインから派生する処理(アカウント作成など)
app.use('/top', top); //topページの処理
app.use('/', index); //適当な処理
app.use('/users', users); //ユーザー画面


node.js에서 MVC 구축



여기는 고민했습니다.
라우터가 있는 것으로 컨트롤러의 역할을 모르게 되고, 어떻게 역할을 나눌까라고.

그냥 작은 제품을 만들어 본 느낌, 컨트롤러는 필요 없습니다.

기본적으로
Model・・・데이터 베스트의 교환을 하는 함수군
View ... view 템플릿을 html 변환하여 보내는 처리
Controller ... MV에 지시

같은 역할로 나눌 것이라고 생각합니다만 라우터도 컨트롤러도 같은 역할입니다.
단지 처리가 복잡해지거나 제품이 커져 온다(로그인, top 페이지로부터 한층 더 나뉘어지는 처리, 개별 유저의 처리, 등등)과 라우터의 다음에 컨트롤러를 만들 필요가 나올까 생각합니다.

덧붙여서 라우터에서 view 템플릿을 렌더링 할 수 있으므로 view도별로 필요없는 생각도 합니다.


이상입니다만, 또 알았던 것이 있으면 추기합니다.

좋은 웹페이지 즐겨찾기