node.js modules의 사용
라우팅과 API
Express 라이브러리
서버 개발과 디버깅
CommonJS를 이용한 모듈 내보내기/불러오기를 할 수 있다.
CommonJS : 웹 브라우저 밖의 자바스크립트를 위한 모듈 생태계의 규칙을 설립하기 위한 프로젝트
exports를 통한 내보내기/ 가져오기
//func.js
function func1 (param) {
// 생략
}
exports.func1 = func1
const obj = require('./func')
obj.func1(10)
obj.func2(20)
module.exports를 통한 내보내기/ 가져오기
// func.js
const obj = {
func1: function (num) {
// ...
},
func2: function (num) {
// ...
}
}
module.exports = obj
const obj = require('./func')
obj.func1(10)
obj.func2(20)
특별한 상황이 아니라면 module.exports를 사용하는 것이 권장
라우팅 : 메소드와 URL(/lower, /upper 등)로 분기점을 만드는 것
클라이언트는 특정한 HTTP 요청 메소드(GET, POST 등)나 서버의 특정 URI(또는 경로)로 HTTP 요청을 보냅니다.
라우팅은 클라이언트의 요청에 해당하는 메소드와 Endpoint에 따라 서버가 응답하는 방법을 결정하는 것입니다.
if (req.url === '/lower') {
let data = '';
req.on('data', chunk => {
data = data + chunk;
});
req.on('end', () => {
data = data.toLowerCase();
res.writeHead(201, defaultCorsHeader);
res.end(data);
});
URL (/lower) 에 POST 메소드를 이용할 때 사용한 코드
이렇게 req.url === '/lower'
를 이용할 수도 있고 express 를 이용해서
app.post('/lower', func(){})
이렇게 이용할 수도 있다.
스프린트에서 배운 것은 API 메소드 중 POST 와 OPTIONS를 이용하는 방법이었다.
클라이언트가 사용할 수 있도록 서버 API 문서를 만들 수 있었지만 만들 수 있었을 뿐이지 잘 만들지는 못할 것 같다.
express 라이브러리를 이용하게 되면request에서 method의 확인 할 필요 없이 바로
app.post('/lower', func(){})
과 같이 필요한 method에 맞게 작성할 수 있어서 작업이 단순해 질 수 있을것 같다.
미들웨어 함수는 요청 오브젝트(req), 응답 오브젝트 (res), 그리고 애플리케이션의 요청-응답 주기 중 그 다음의 미들웨어 함수 대한 액세스 권한을 갖는 함수
아직 미들웨어의 개념에 대해선 완벽하게 알 수 없다. 다만 미들웨어를 자주 사용하는 상황이 4가지 이고
1.모든 요청에 대해 url이나 메소드를 확인할 때
2.POST 요청 등에 포함된 body(payload)를 구조화할 때(쉽게 얻어내고자 할 때)
3.모든 요청/응답에 CORS 헤더를 붙여야할 때
4.요청 헤더에 사용자 인증 정보가 담겨있는지 확인할 때
관련 코드를 적어놓은 블로그 및 사이트를 찾았다.
https://expressjs.com/ko/guide/using-middleware.html
https://velog.io/@yesparrot/express%EC%99%80-%EB%AF%B8%EB%93%A4%EC%9B%A8%EC%96%B4-3zhxqc5w
아직 express에 대해 공부를 더 해야겠다고 생각이 든다. express를 조금 알거 같으니 middleware가 나오는데 middleware는 아무리 요리보고 조리봐도 이해를 못하는 부분이 훨씬 많기 때문이다. 이제 시작인데 벌써 지치지 말자