개발일지 2주차 WIL
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 등의 데이터형식