상세 컨텐츠

본문 제목

[Node.js] 라우터 만들기

Node.js

by 래모 2024. 7. 21. 15:12

본문

본 게시물은 [Node.js 백엔드 개발자 되기 ]도서를 보고 작성되었습니다.

 


 

라우터 만들기

URL의 pathname 에 있는 정보를 활용하는 라우터를 만들어보자!

 

const http = require("http");
const url = require("url"); // url 모듈 로딩

http.createServer((req, res) => {
    const path = url.parse(req.url, true).pathname; // 패스명 할당
    res.setHeader("Content-Type", "text/html");

    if (path === "/user") { // user 결과값 설정
        res.end("[user] name : juhui , age : 25")
    } else if (path === "/feed") { // feed 결과값 설정
        res.end(`
            <ul>
                <li>picture1</li>
                <li>picture2</li>
                <li>picture3</li>
            </ul>`);
    } else {
        res.statusCode = 404;
        res.end("404 page not found")
    }
})
    .listen("3000", () => console.log(
        "라우터 만들어보자!"
    ))

 

url 모듈을 불러와서 path에 대한 정보를 할당해준다

이후 if 문으로 적당히 구별하면 간단한 라우팅 완성이다

 

위는 요청에 대한 응답을 createServer()안에서 직접 컨트롤 하고 있다.

이는 createServer()안의 콜백 함수에 모든 코드를 다 추가해야 함으로 별로 좋지 않음

 

따라서 리팩터링해보면 다음과 같다.

const http = require("http");
const url = require("url"); // url 모듈 로딩

http.createServer((req, res) => {
    const path = url.parse(req.url, true).pathname; // 패스명 할당
    res.setHeader("Content-Type", "text/html");

    if (path === "/user") { // user 결과값 설정
        user(req, res)
    } else if (path === "/feed") { // feed 결과값 설정
        feed(req, res)
    } else {
        notFound(req, res)
    }
})
    .listen("3000", () => console.log(
        "라우터 만들어보자!"
    ))

const user = (req, res) => {
    res.end("[user] name : juhui , age : 25")
}

const feed = (req, res) => {
    res.end(`
            <ul>
                <li>picture1</li>
                <li>picture2</li>
                <li>picture3</li>
            </ul>`)
}

const notFound = (req, res) => {
    res.statusCode = 404;
    res.end("404 page not found")
}

 

 

동적으로 응답하기

query에 담긴 정보를 활용해보자

const user = (req, res) => {
    const userInfo = url.parse(req.url, true).query
    res.end(`[user] name : ${userInfo.name} , age : ${userInfo.age}`)
}

 

 

 

 

라우터 리팩토링하기

라우터가 매우매우매우 커졌을 때 map 자료구조를 사용하면 편해진다!

...
http.createServer((req, res) => {
    const path = url.parse(req.url, true).pathname; // 패스명 할당
    res.setHeader("Content-Type", "text/html");

    if (path in urlMap) {
        urlMap[path](req, res)
    }
    else {
        notFound(req, res)
    }
})
    .listen("3000", () => console.log(
        "라우터 만들어보자!"
    ))
...
const urlMap = {
    "/": (req, res) => res.end("Home"),
    "/user": user,
    "/feed": feed
}

 

urlMap이 가장 하단에 있는 이유는 user와 feed 함수보다 위에 있으면 에러가 나기 때문이다

const로 선언한 변수들은 초기화 전에 읽을 수 없어서 에러가 남!!

 

 

'Node.js' 카테고리의 다른 글

[Node.js] Express로 간단한 API 서버 만들어보기  (1) 2024.07.22
[Node.js] Node.js 입문!!  (1) 2024.07.12

관련글 더보기