Express API
FE BE 개발 메모장/Node.js, API

Express API

 JavaScript 생태계에서, 인기있는 프레임 워크의 앞글자를 따서 MERN Stack으로 흔히들 부른다.(MongoDB, Express, React, Node) 여기서 Express.js는 Node.js환경에서 웹 어플리케이션 혹은 API를 제작하기 위해 사용되는 인기있는 프레임워크이다.

 

 

expressjs.com/ko/

공식 API홈페에지에선 이렇게 소개된다.

 

1. 웹 및 모바일 애플리케이션을 위한 강력한 기능을 제공하는 간결하고 유연한 Node.js 웹 애플리케이션 프레임워크.

2. HTTP유틸리티 메소드, 미들웨어를 통한 쉽고 빠르게 강력한 API 작성가능.

3. 많음 프레임워크들의 기반.

 

시작하기

Node.js가 설치되었다는 가정 하에 터미널에서 다음과 같이 입력한다

npm install express --save

 

라우팅(Routing) 

라우팅은 URI, 특정 HTTP 메소드를 이용해 URI가 클라이언트 요청에 응답하는 방식을 말한다.

 

기본적인 라우트 구조

app.METHOD(PATH, HANDLER)

app : Exrpess 인스턴스
METHOD : HTTP 요청 메소드
PATH : 서버 경로
HANDLER : 라우트가 일치할 때 실행되는 함수

 

라우팅

app.get('/', (req, res) => {
  res.send(`I'm GET`);
})

app.post('/', (req, res) => {
  res.send(`I'm POST`)
})
app.put('/target', (req, res) => {
  res.send('change /target')
})

app.delete('/target', (req, res) {
  res.send('I Want to DELETE req at /target')
})

 

미들웨어

요청(req), 응답(res) 객체, 어플리케이션 요청-응답 사이클 도중 그 다음의 미들웨어 함수에 대한 엑세스 권한을 갖는 함수라고 어렵게 설명이 되어있다. 쉽게 말하자면 미들웨어는 요청과 응답 사이에서 어떤 불량품이나 특정 제품을 빼내야할 때 중간에 껴있는 함수를 호출한다.

 

미들웨어가 주로 쓰이는 상황

 

1.모든 요청에 대한 URL이나 메소드를 알고자 할 때,때

2. POST 요청 등에서 쓰이는 body(payload)를 쉽게 얻고자 할 때

3. 모든 요청/응답에 CORS 헤더를 붙일 때

4. 요청 헤더에 사용자 인증 정보가 담겨있는지 확인하고 싶을 때

 

대충 작동 원리

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

const reqTime = (req, res, next) {
  req.reqTime = Date.now();
  next();
};

app.use(reqTime);

app.get('/', (req, res) => {
  const resText = 'Hi'
  resText += `TimeIsNow: ${req.reqTime} `;
  res.send(resText);
});

app.listen(3000);

이 앱은 reqTime라는 미들웨어 함수를 사용한다. 앱이 루트('/')에 대한 요청을 실행하면, 타임스탬프를 브라우저에 표시한다.

미들웨어의 다양한 사용법

expressjs.com/ko/guide/using-middleware.html

 

cors 미들웨어

CORS혜떠를 붙일땐 writeHead 메소드 등을 이용해 Access-Control-Allow-* 이런 방법으로 정의해줬다. 별도로 OPTIONS으로도 구현 해줘야 했었지만 cors 미들웨어를 사용하면 쉽게 해결이가능하다

 

모든 요청에 대한 cors 허용
const cors = require('cors');

app.use(cors())

 

특정 라우트에만 cors 허용
const cors = require('cors')

app.get('/products/:id', cors(), function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for a Single Route'})
})

 

옵션 넣는 법
const cors = require('cors')

var corsOptions = {
  origin: 'http://example.com',
  optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
}

app.get('/products/:id', cors(corsOptions), function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for only example.com.'})
})

 

 

body-parser 미들웨어

HTTP body(payload)를 받아내기 위해서는 Buffer를 조합해 복잡한 방식으로 body를 가져왔다면, 쉽게 해결할 수 있는 역할이 body-parser 미들웨어이다.

const bodyParser = require('body-parser')
const jsonParser = bodyParser.json()

app.post('/api/users', jsonParser, (req, res) {
	
)}

 

대표적인 Request 프로퍼티

req.params()

 

req.body()

req.query()

 

대표적인 Response 프로퍼티

res.end()

res.send()

res.json()

res.redirect()

'FE BE 개발 메모장 > Node.js, API' 카테고리의 다른 글

NPM과 NVM 그리고 NPX  (0) 2021.06.17
CORS (Cross Origin Resource Sharing) 적용 방법  (0) 2021.06.16
Node.js 에 대해 자세히 알아보자  (0) 2021.02.09
fetch API  (0) 2021.02.03