NodeJs

TDD[2] Express.js 역할 및 구조의 이해

코딩클로스 2021. 3. 31. 02:12

익스프레스JS 기초

어플리케이션

익스프레스 인스턴스를 어플리케이션이라 한다

서버에 필요한 기능인 미들웨어를 어플리케이션에 추가한다

라우팅 설정을 할 수 있다

서버를 요청 대기 상태로 만들수 있다

 

express를 사용하지 않고 만든 어플리케이션

const http = require('http');  //노드에서 기본적으로 제공해줌 기본모듈을 가져옴

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
    if (req.url === '/') {
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/plain');
        res.end('Hello World\n');
    }
    else if (req.url === '/users'){
        const users = [
            {name: 'Alice'},
            {name : 'Beck'},
        ]
        res.statusCode = 200;
        res.setHeader('Content-Type', 'application/json');
        res.end(JSON.stringify(users));
    }
});

server.listen(port, hostname, () => {
    console.log("server running");
})

 

미들웨어

어플리케이션이 뼈대면 미들웨어는 거기다가 끼워서 쓰는것과 같다.

미들웨어는 함수들의 연속이다

로깅 미들웨어를 만들어 보자

const http = require('http');
const express = require('express');
const logger = require('morgan');
const app = express()

const mw = (req, res, next) => {
    console.log("미들웨어 log..")
    next(); //미들웨어 함수를 만들때 가장 중요한점 next() 함수를 꼭 호출해야 다음 미들웨어 혹은 어플리케이션행동을 실행할 수 있다.
}

app.use(mw) //미들웨어는 함수들의 연속 내가만든거
app.listen(3000, () => console.log('running'))

 

써드파티 미들웨어를 사용해 보자

밑과같이 요청에 대한 응답을 이렇게 이쁘게 나타냄

const http = require('http'); 
const express = require('express');
const logger = require('morgan');
const app = express()

app.use(logger('dev')) //다른사람들이 만들어 놓은거

app.listen(3000, ()=> console.log('running'))

일반 미들웨어 vs 에러 미들웨어

 

일부러 일반 미들웨어에서 에러를 내보자

즉 일반 미들웨어에서 에러가 발생한것을 에러미들웨어에서 잡아서 수행한것

const http = require('http'); 
const express = require('express');
const logger = require('morgan');
const app = express()

const mw = (req, res, next) =>{
   throw Error("error!")
}

const errorMw = (err, req, res, next) => {
  console.log(err.message)  
}

app.use(logger('dev')) //다른사람들이 만들어 놓은거
app.use(mw) //미들웨어는 함수들의 연속 내가만든거
app.use(errorMw) //미들웨어는 함수들의 연속 내가만든거

app.listen(3000, ()=> console.log('running'))

 

밑과 같이 수정시 아무 로그가 안남음

const http = require('http'); 
const express = require('express');
const logger = require('morgan');
const app = express()

const mw = (req, res, next) =>{
   next();
}

const errorMw = (err, req, res, next) => {
  console.log(err.message)  
}

app.use(mw) //미들웨어는 함수들의 연속 내가만든거
app.use(errorMw) //미들웨어는 함수들의 연속 내가만든거

app.listen(3000, ()=> console.log('running'))

 

 

라우팅

요청 url에 대해 적절한 핸들러 함수로 연결해 주는 기능을 라우팅이라고 부른다

어플리케이션의 get(), post() 메소드로 구현할 수 있다

라우팅을 위한 전용 Router 클래스를 사용할 수도 있다

 

응답 객체

클라이언트 응답 정보를 담은 객체를 응답(Response)객체라고한다.

http 모듈의 response 객체를 래핑한 것이다

res.send(), res.status(), res.json() 메소드를 주로 사용한다.

 

요청 객체

클라이언트 요청 정보를 담은 객체를 요청객체라고 한다.

http 모듈의 request 객체를 래핑한 것이다.

req.params(), req.query(), req.body() 메소드를 주로 사용한다.