웹 풀스택

Node.js에서 Router를 통해 URL에 따라 다른 response 보내기

kevinmj12 2025. 2. 4. 15:11
// requestHandler.js

function main(response) {
  response.writeHead(200, { "Content-Type": "text/html" });
  response.write("Main Page");
  response.end();
}

function login(response) {
  response.writeHead(200, { "Content-Type": "text/html" });
  response.write("Login Page");
  response.end();
}

let handle = {};
handle["/"] = main;
handle["/login"] = login;

exports.handle = handle;

 

먼저 url에 따라 다른 response를 보내는 역할을 담당하는 requestHandler.js를 만든다.

handle 이라는 변수에 key, value를 저장할 수 있도록 해주고

"/"는 main,

"/login"는 login으로 연결되도록 한다.

만약 다른 url을 추가하여 처리하고 싶다면 handle과 함수를 추가해주면 된다.

 

이제 handle을 통해 url이 "/"라면 main을, "/login"이라면 login을 반환할 수 있다.

 

// index.js

let server = require("./server");
let router = require("./router");
let requestHandler = require("./requestHandler");

server.start(router.route, requestHandler.handle);

 

index.js에서 requestHandler를 정의한 후 server.js에 requesetHandler.handle을 전달해준다.

 

// server.js

let http = require("http");
let url = require("url");

function start(route, handle) {
  function onRequest(request, response) {
    let pathname = url.parse(request.url).pathname;
    route(pathname, handle, response);
  }

  http.createServer(onRequest).listen(8888);
}

exports.start = start;

 

server.js에서 route()함수에 현재 url 주소인 pathname, 그리고 handle, response 3가지를 전달해준다.

 

// router.js

function route(pathname, handle, response) {
  if (typeof handle[pathname] == "function") {
    handle[pathname](response);
  } else {
    response.writeHead(404, { "Content-Type": "text/html" });
    response.write("This page could not be found");
    response.end();
  }
}

exports.route = route;

 

route에서는 pathname을 handle에 넣었을 때 나온 값에 따라 어떤 행동을 취할지를 결정한다.

만약 handle[pathname]의 타입이 function이라면, 그에 맞는 함수(main() 또는 login())를 호출한다.

그렇지 않다면, statuscode 404와 함께 페이지를 찾을 수 없다는 response를 전달한다.

 

먼저 기본 url인 "/"에 접속하였을 때이다.

Main Page가 잘 나오는 것을 확인할 수 있다.

 

다음으로 "/login"에 접속하였을 때이다.

Login Page가 잘 나오는 것을 확인할 수 있다.

 

"/" 또는 "/login"이 아닌 다른 url에 접속하는 경우이다.

페이지를 찾을 수 없다는 문구가 잘 나오는 것을 확인할 수 있다.