[NodeJS] 4장 Express.js 프레임워크

1.Express.js 프레임워크

Express.js는 Node.js를 위한 웹 애플리케이션 프레임워크로, 경량화되어 있으며 유연성이 뛰어나, 웹 서버 및 API를 쉽게 구축할 수 있도록 도와줍니다. Express.js의 주요 특징을 다음과 같습니다.

  • 미들웨어: 요청과 응답 사이 동작하는 기능을 쉽게 추가 가능
  • 라우팅: URL 경로에 따라 요청을 처리할 수 있는 라우팅 기능 제공
  • RESTful API 지원: RESTful 아키텍쳐 스타일을 쉽게 구현할 수 있음

2.Express 설치 및 기본 사용법

# Express 설치
npm install express && yarn add express

 

다음 코드는 Express 애플리케이션을 간단하게 설정해보겠습니다.

// app.js 파일 생성
const express = require("express");
const app = express();
const port = 3000;

// Default Route Setting
app.get("/", (req, res) => {
  res.send("Hello, World!");
});

// Server Start
app.listen(port, () => {
  console.log(`Server is running at http://localhost:${port}`);
});

 

아래 명령어로 서버를 실행합니다.

node app.js

 

브라우저에서 http://localhost:3000에 접속하면 "Hello, World!" 메시지를 볼 수 있습니다.


3. 라우터 

라우터는 요청 URL에 따라 서로 다른 요청 핸들러를 정의하는 방법입니다.

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

// JSON 요청 본문 파싱
app.use(express.json());

// 라우터 생성
const router = express.Router();

app.get("/", (req, res) => {
  res.send("Welcome to the API!");
});

// 라우터 핸들러 설정
router.get("/users", (req, res) => {
  res.json([{ id: 1, name: "John Doe" }]);
});

router.get("/products", (req, res) => {
  res.json([{ id: 2, name: "Product A" }]);
});

// 라우터를 애플리케이션에 추가
app.use("/api", router);

// 서버 시작
app.listen(port, () => {
  console.log(`Server is running at http://localhost:${port}`);
});

 

위 예제에 /api/users와 /api/products 경로에 대한 요청을 처리합니다.


4. 미들웨어

미들웨어는 요청과 응답 사이에 실행되는 함수로, 요청을 수정하거나 응답을 가로채는 데 사용됩니다.

// 요청 로깅 미들웨어
// app.js 파일 생성
const express = require("express");
const app = express();
const port = 3000;

app.use((res, req, next) => {
  console.log(`${req.method} ${req.url}`);
  next(); // 다음 미들웨어 또는 핸들러 진행
});

// 기본 라우트
app.get("/", (req, res) => {
  res.send("Hello, World!");
});

// 서버 시작
app.listen(port, () => {
  console.log(`Server is running is at ${port}`);
});

5.RESTful API 구축

RESTful API를 구축하는 방법은 다음과 같습니다. 예제로 사용자 정보를 관리하는 API를 만들어 보겠습니다.

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

app.use(express.json()); // JSON 요청 본문 파싱

let users = []; // 사용자 데이터를 저장할 배열

// 사용자 목록 조회
app.get("/api/users", (req, res) => {
  res.json(users);
});

// 사용자 추가
app.post("/api/users", (req, res) => {
  const user = req.body;
  users.push(user);
  res.status(201).json(user); // 생성된 사용자 반환
});

// 사용자 조회
app.get("/api/users/:id", (req, res) => {
  const user = users.find((u) => u.id === parseInt(req.params.id));
  if (!user) return res.status(404).send("User not found");
  res.json(user);
});

// 사용자 수정
app.put("/api/users/:id", (req, res) => {
  const userIndex = users.findIndex((u) => u.id === parseInt(req.params.id));
  if (userIndex === -1) return res.status(404).send("User not found");

  users[userIndex] = req.body;
  res.json(users[userIndex]);
});

// 사용자 삭제
app.delete("/api/users/:id", (req, res) => {
  const userIndex = users.findIndex((u) => u.id === parseInt(req.params.id));
  if (userIndex === -1) return res.status(404).send("User not found");

  users.splice(userIndex, 1);
  res.status(204).send(); // 삭제 후 No Content 응답
});

// 서버 시작
app.listen(port, () => {
  console.log(`Server is running at http://localhost:${port}`);
});

6.API 테스트

  • 사용자 추가: POST http://localhost:3000/api/user  (JSON 본문: { "id": 1, "name" : "John Doe" })
  • 사용자 목록 조회: GET http://localhost:3000/api/users
  • 특정 사용자 조회: GET http://localhost:3000/api/users/1
  • 사용자 수정: PUT http://localhost:3000/api/users/1 (JSON 본문: { "name" : "John Doe" })
  • 사용자 삭제: DELETE http://localhost:3000/api/users/1

 

 

GitHub - nodeJsroom/node-js-bloging

Contribute to nodeJsroom/node-js-bloging development by creating an account on GitHub.

github.com

 

LIST