Request
- Request란 클라이언트가 서버에게 전달하려는 정보나 메세지를 담은 객체를 의미한다.
- Request의 세부 사항에는 URL, http method, 헤더( header ), 쿼리 파라미터 ( query parameter ), 바이 데이터 ( body data ) 등이 포함 된다.
Response
- Response란 서버에서 클라이언트로 응답 메세지를 전송시켜주는 객체다.
- Response의 세부 사항에는 상태 코드 ( status code ), 응답 데이터 ( response data ), 응답 헤더 ( response header ) 등이 포함된다.
서버 모듈
- Node.js의 서버 모듈에는 대표적으로 http 모듈과 Express.js가 존재한다. ( http 모듈은 Node.js에서 기본 제공하는 http 서버 모듈이다 )
- Express.js는 http 모듈을 확장해 제공한다.
- Express.js는 기존 http 모듈의 메서드도 사용할 수 있지만, Express.js가 추가 제공하는 메서드나 속성들을 사용할 수 있다.
Express.js 통신 흐름
- 클라이언트는 특정 URL과 데이터를 담은 요청 ( Request )을 서버에 전송한다.
- 서버는 받은 데이터에 따라 필요한 비즈니스 로직을 수행한다.
- 서버는 처리된 결과를 클라이언트에게 응답 ( Response )으로 보내준다.
예제 )
app.js
// app.js
import express from 'express';
import goodsRouter from './routes/goods.js';
import newsRouter from './routes/news.js';
const app = express();
const PORT = 3000; // 서버를 열 때 사용할 포트 번호
app.get('/', (req, res) => {
res.send('Hello World!');
});
// 1. Express.js의 서버를 엽니다.
app.listen(PORT, () => {
console.log(PORT, '포트로 서버가 열렸어요!');
});
// localhost:3000/api -> goodsRouter
// localhost:3000/api -> newsRouter
// 2. 라우터를 등록 합니다.
// app.use 미들웨어를 사용해 /api로 접속하면 goodsRouter와 newsRouter를 연결(등록)한다
app.use('/api', [goodsRouter, newsRouter]);
1. 서버시작
app.listen을 통해 3000 포트로 웹 서버를 연다.
2. 라우터 등록
app.use 미들웨어를 사용해 /api 주소에 goodsRouter와 newRouter를 연결(등록)한다.
news.js
// routes/news.js
import express from 'express';
const router = express.Router();
// req : 클라이언트가 전달한 Path Params
// res : 서버가 클라에게 전달할 데이터 ( json 형태로 전달 )
/** 뉴스 목록 조회 API **/
// 3. HTTP Method와 URL을 지정한 API를 정의합니다.
// 만약, localhost:3000/api/news 라는 URL로 GET 요청이 들어온다면 해당 코드를 실행합니다.
router.get('/news', (req, res) => {
// 4. 사용자의 요청에 맞는 데이터를 반환합니다.
return res // Express.js의 res 객체를 반환합니다.
.status(200) // API의 상태 코드를 200번으로 전달합니다.
.send('뉴스 목록 조회 API 입니다.'); // API의 결과값을 '뉴스 목록 조회 API 입니다.'로 전달합니다.
});
/** 뉴스 세부 조회 API **/
// 3. HTTP Method와 URL을 지정한 API를 정의합니다.
// 만약, localhost:3000/api/news/:newsId 라는 URL로 GET 요청이 들어온다면 해당 코드를 실행합니다.
router.get('/news/:newsId', (req, res) => {
// 클라이언트가 전달한 Path Params 데이터를 받아옵니다.
const params = req.params;
// Path Params 데이터 중 newsId를 추출합니다.
const newsId = params.newsId;
// 서버 콘솔에 클라이언트가 전달한 newsId를 출력합니다.
console.log('클라이언트로 부터 전달받은 뉴스 ID:', newsId);
// 4. 사용자의 요청에 맞는 데이터를 json 형태로 반환합니다.
return res.status(200).json({
data: '뉴스 세부 조회 API 입니다.',
});
});
// Express 라우터를 외부로 전달합니다.
export default router;
3. API 정의
등록된 각 라우터를 순서대로 검토하고, HTTP Method와 URL이 일치하는 함수를 실행한다.
-URL /api/news로 GET 요청이 들어오면 router.get('/new' ~ )을 실행한다.
-URL /api/news/:newsId로 GET 요청이 들어오면 router.get('/new/:newsId' ~)을 실행한다.
- 여기서 중요한 부분은 :newId에 해당하는 경로 변수다. 이는 req.params을 통해 들어온 변수를 읽어들일 수 있다.
- 위 코드에서는 req.params을 통해 들어온 변수를 params에 저장하고 params.newsId를 통해 해당 변수를 읽어오고 출력해주는 형태다
4. 결과 반환
API에서 모든 로직 처리가 완료된 후, 클라이언트에게 결과를 전달한다.
'Javascript' 카테고리의 다른 글
[Javascript][Node.js] Mongo DB (0) | 2024.09.02 |
---|---|
[Javascript][Node.js] Express.js - req, res 객체 (0) | 2024.08.30 |
[Javascript] API Client ( Insomnia API Client ) (0) | 2024.08.30 |
[Javascript] API (0) | 2024.08.29 |
[Javascript] Module (0) | 2024.08.29 |