개발일지

개발일지 2주차 WIL

index.ys 2023. 4. 16. 20:00

Express 미들웨어

Express.js

- Node.js로 서버를 빠르고 간편하게 만들 수 있게 도와주는 프레임워크

- Express와 비슷한 프레임워크로 Nest.js가 있다, express보다 복잡하지만 사용할 수 있는기능이 많다. Nest.js는 TypeScript로 작성된다.

미들웨어

- 미들웨어란 클라이언트에게 요청이 오고 그 요청을 보내기 위해 응다바려는 중간에 목적에 맞게 처리를 하는, 거쳐가는 함수들

- 요청에 대해 공통적인 처리를 하고 싶은 경우 미들웨어를 이용해 요청, 응답에 공통적처리가 가능한 express함수

- app.use()로 호출해서 사용가능

내가 적용한 미들웨어 1

- 변수 postsRouter와 commentsRouter url주소에 공통적으로 /work라는 주소를 추가한다

app.use("/work", [postsRouter, commentsRouter])

내가 적용한 미들웨어 2

- post 요청으로 전송된 JSON데이터

{
  "name": "jjangu",
  "age": 5,
  "job": "student"
}

- 데이터 파싱전에는 문자열(String)형태로 전달.

'{"name": "jjangu", "age": 5, "job": "jjangu"}'

- 요청된 데이터 를 미들웨어 함수로 파싱.

app.use(express.json())

- 파싱 후 데이터 객체(Obj)형태로 전달되어 key:value 값에 접근하여 express.js에서 사용할 수 있음.

{
  name: 'jjangu',
  age: 5,
  job: 'student'
}

예제1

- 요청이 발생할때 마다 요청된 메서드와 url을 콘솔에 출력함.

- next()는 미들웨어를 호출하기 위해 사용되는 콜백함수이다. next매개변수를 통해 다음 미들웨어 함수로 요청을 전달함.

- next()를 호출하지 않으면 다음 미들웨어 함수로 요청이 전달되지 않는다.

const logger = (req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next();
}

app.use(logger);

예제2

- 미들웨어 함수를 사용하여 인증구현

- 변수 auth는 req, res, next 3개의 매개변수를 가짐

// /api/protected url로 get요청이 들어왔을때 auth실행
const auth = (req, res, next) => {
//변수 token을 헤더에서 토큰을추출해 할당
  const token = req.headers.authorization;
  //요청토큰값 'mySecretToken' 은 실제로는 랜덤할 문자열의 값을 사용
  //true일때 next()함수를 호출하여 다음 미들웨어 함수 실행
  if (token === 'mySecretToken') {
    next();
  } else {
  //false 일때 'Unauthorized' 라는 메세지 반환
    res.status(401).send('Unauthorized');
  }
}

app.get('/api/protected', auth, (req, res) => {
  res.send('Welcome to the protected route');
});

예제3

- 애플리케이션에서 에러가 발생했을 때, 호출되는 함수를 errorHandler를 선언하여 앱내에서 발생하는 모든에러에 대해 처리 할 수있다.

const errorHandler = (err, req, res, next) => {
//에러스택을 콘솔에 출력함
  console.error(err.stack);
  //사용자에게 'Something went wrong' 라는 메세지 반환
  res.status(500).send('Something went wrong');
}

app.use(errorHandler);

express middleware 공식 홈페이지

https://expressjs.com/en/guide/using-middleware.html

 

Using Express middleware

Using middleware Express is a routing and middleware web framework that has minimal functionality of its own: An Express application is essentially a series of middleware function calls. Middleware functions are functions that have access to the request ob

expressjs.com

RESTful API

- REST의 의미 : Representational State Transfer약자 소프트웨어 프로그램 아키텍처(구조)의 형식.

- 웹에 존재하는 모든 자원(이미지, 동영상 , db)에 대한 고유한 URI를 부여해 활용하는 것으로 자원을 정의하고 그데애한 주소를 지정하는 방법

- URL, Headers, Method 등 네트워크 표현수단을 사람이 봐도 이해하기 쉬운표현으로 정의한다.

- 간단하게 말하면 클라이언트와 서버가 인터넷을 통해 자원을 교환하기 위해 사용하는 인터페이스 이다

RESTful의 목적

- RESTful의 목적은 이해하기 쉽고 사용하기 쉬운 REST API를 만드는것

자원

- 서버에 존재하는 데이터, 모든 자원은 고유의 URI를 가짐.

URI

- 자원(Resource)을 식별하고 위치를 지정하기 위한 고유한 식별자

scheme://host:port/path?query#fragment
  • scheme: 자원에 접근하기 위한 프로토콜(http, https, ftp 등)
  • host: 자원이 위치한 호스트 이름 또는 IP 주소
  • port: 자원에 접근하기 위한 포트 번호
  • path: 자원의 경로를 나타내는 문자열(/로 구분된 계층 구조)
  • query: 자원에 대한 추가 정보를 제공하는 매개변수
  • fragment: 자원 내의 특정 부분을 나타내는 문자열

예시)

https://example.com/api/users/123?sort=name#profile
  • Scheme: https : 프로토콜
  • host: example.com : 호스트 이름
  • path : /api/users/123 : 
  • query : ?sort(key)=name(value) 자원에 대한 추가 정보 제공
  • fragment: #profile 자원의 특정 부분을 나타내는 문자열

행위

- 클라이언트가 HTTP 메서드를 이용해 자원을 조작하는것

- HTTP 메서드 종류

  • GET
  • POST
  • PUT
  • PATCH
  • DELETE

표현

- JSON , Xml 등의 데이터형식