WEB-STUDY

Express.js

비숑주인 2025. 1. 31. 22:28

Express.js 

- HTTP 모듈을 사용해서 서버를 만들 수도 있지만
- 익스프레스에는 HTTP 모듈의 기능 외에도 다양한 기능이 포함되어 있음

 


Express.js 시작하기

 

npm init // 초기화
npm i express // Express 시작하기

 

nodemon 패키지 설치하기

 

서버 코드를 수정했을 경우에, 기존의 실행하던 서버를 멈추고, 다시 실행 해야만 수정이 됨. 이 때 nodemon 패키지를 설치하면 기존의 실행하던 서버를 멈추지 않아도 수정된 내용을 바로 적용할 수 있다. 

 

npm i nodemon --save-dev -g
// 개발하는 동안에만 사용하고, 코드를 배포할 때는 사용X
// global 한번 설치함으로서 시스템에 있는 다른 곳에서도 자유롭게 사용 가능

 

package.json에 아래와 같이 표기가 되는데 이를 보면 express는 dependencies에 포함이 되었지만, nodemon은 포함되지 않았다. 이는 nodemon이 앱 코드 자체에는 영향을 주지 않는다는 뜻이다. 

 

"author": "",
"license": "ISC",
"dependencies":
    { "express": "^4.18.2" }

 

서버 파일은 app.js에 만들면 된다. 

먼저 express 모듈을 가지고 와서 express 변수에 할당하자. 

 

const express = require("express");
const app = express();

// 라우팅
// 서버 이름 뒤에 요청 방식과 함께 요청 경로를 지정하고, 어떤 걸 실행할지는 콜백 함수 형태로 제공

app.get("/", (req, res) => {
    res.send('Hello, Node!');
});

app.listen(3000, () => {
    console.log('서버 실행 중');
});

 

HTTP 모듈에서는 if, else if을 사용해서 경로와 요청 방식을 일일이 체크 해줬어야 했다면 Express 서버에서는 요청 방식을 함수 이름으로 사용한다. 

 

nodemon으로 실행

$nodemon app

 

Express.js

 

Post는 사용자가 지정한 정보를 서버로 보낸다. 보통은 폼을 이용해서 사용자가 값을 입력하게 함. 

 

const express = require("express");
const app = express();

// 라우팅
// 서버 이름 뒤에 요청 방식과 함께 요청 경로를 지정하고, 어떤 걸 실행할지는 콜백 함수 형태로 제공

app.get("/", (req, res) => {
    res.send('Hello, Node!');
});

// post, put, delete
app.post("/contacts", (req, res) => {
    res.send("Create Contacts");
});

app.listen(3000, () => {
    console.log('서버 실행 중');
});

 

Thunder client

 

vscode에서 제공하는 postman 같은 확장 

 

위 사진과 같이 Post 방식을 확인해 보면 Create Contacts가 뜨며 정상적으로 작동하는 것을 볼 수 있다. 

 

만약 특정 조건의 입력값만 가지고 오고 싶다면? 라우트 파라미터 사용하기! 

 

라우트 파라미터

 

  • 특정 조건을 지정할 때 라우팅 코드에서 요청 URL 뒤에 :를 붙인 후 그 뒤에 변수 작성
    /요청 URL/:id
  • 요청 할 때는 요청 URL 뒤에 조건 값 지정
    예) 연락처 정보 중에서 아이디가 '1'인 것을 가져오려면
    /contacts/1
요청 방식 요청 URL 역할
GET /contacts/:id id에 맞는 연락처 가져오기
PUT /contacts/:id id에 맞는 연락처 수정하기
DELETE /contacts/:id id에 맞는 연락처 삭제하기

 

// 연락처 가져오기
app.get("/contacts", (req, res) => {
    res.send("Contacts Page");
});

// 연락처 1개 가져오기
app.get("/contacts/:id", (req, res) => {
    res.send(`View Contact for ID : ${req.params.id}`);
    // 이 아이디 값을 담고 있는 건 req.params.id(request에서 parameter가 담겨 있는 객체 중에서 id 값)
    //req.params는 Express에서 경로 파라미터(Route Parameters)를 담고 있는 객체
});

// 새 연락처 추가하기
app.post("/contacts", (req, res) => {
    res.send("Create Contacts");
});

// 연락처 수정하기
app.put("/contacts/:id", (req, res) => {
    res.send(`Update Contact for ID : ${req.params.id}`);
});

// 연락처 삭제하기
app.delete("/contacts/:id", (req, res) => {
    res.send(`Delete Contact for ID : ${req.params.id}`);
});

 

 

Thunder client 에서 post 방식을 보면 위와 같이 새 연락처 추가하기가 나온다. 

 

 

id값 10을 붙히고 get 방식으로 보면 req.params.id에 저장 되어 있는 10이 보인다. 

 

익스프레스 요청 객체의 속성

 

속성 설명
req.body 서버로 POST 요청할 때 넘겨준 정보를 담고 있습니다. 예를 들어 로그인 버튼을 눌렀을 때 사용자의 아이디와 비밀번호의 값이 req.body에 들어 있습니다.
req.cookies 클라이언트에 저장된 쿠키 정보를 서버로 넘겨줄 경우 쿠키 정보를 담고 있습니다.
req.headers 서버로 요청을 보낼 때 함께 보낸 헤더 정보를 담고 있습니다.
req.params URL 뒤에 추가한 파라미터가 포함되어 있을 경우 파라미터 정보를 담고 있습니다.
req.query 요청 URL에 포함된 질의 매개변수(?key=value 형태)를 담고 있습니다. 예를 들어 검색 사이트에서 검색어를 입력하고 검색 버튼을 클릭했을 때 검색어와 관련된 질의 매개변수가 req.query에 담깁니다.

 

ex) GET 요청의 요청 헤더 확인하려면

 

app.get("/", (req, res) => {
    const headers = req.headers;
    res.send(headers);
});

 

익스프레스 응답 객체의 함수

함수 설명
res.download 파일을 내려받습니다.
res.end 응답 프로세스를 종료합니다.
res.json JSON 응답을 전송합니다.
res.jsonp JSONP 지원을 통해 JSON 응답을 전송합니다.
res.redirect 요청 경로를 재지정해서 강제 이동합니다.
res.render 뷰 템플릿을 화면에 렌더링합니다. (10-2장에서 설명합니다.)
res.send 어떤 유형이든 res.send() 괄호 안에 내용을 전송합니다.
res.sendFile 지정한 경로의 파일을 읽어서 내용을 전송합니다.
res.sendStatus 상태 메시지와 함께 HTTP 상태 코드를 전송합니다.
   
res.status 응답의 상태 코드를 설정합니다.