바디파서 미들웨어

요청 본문에 있는 내용을 프로그래밍에 사용하려면 바디파서 미들웨어를 등록해야 한다.

 

 

 

 

예시

요청한 바디 값을 콘솔에 찍어보려고 한다.

 

 

 

 

바디 값에 Json 형식으로 내용을 적고 보냈으나 요청한 바디값이 undefined가 떴다. 이는 body parser 미들웨어를 등록하지 않았기 때문이다.

 

 

 

 

 

 

애플리케이션 코드에 가서 body parser 미들웨어를 다음과 같이 등록한다. json()은 json 형식의 본문을 파싱하고,

urlencoded()는 URL로 인코딩된 본문을 파싱한다.

다시 post를 실행해보면 콘솔에 내가 요청한 바디값의 내용이 출력된다.

 

 

 

 

 

이를 이용해서 재미있는걸 하나 해봤다. 먼저 바디값을 각각 name, email, phone으로 추출한다.

이들 중 값이 하나라도 없다면 res.send()를 이용해 '필수 값이 입력되지 않았습니다.'로 메세지를 띄울 것이다.

 

 

 

 

 

JSON 형식으로 값을 하나도 보내지 않아봤더니 Response 메세지에 '필수 값이 입력되지 않았습니다.' 라고 뜬다.

 

 

 

라우터 미들웨어

Router 객체를 이용하여 라우트 코드를 보다 읽기 쉽고 관리하기 쉽게 해줌

 

 

 

 

예시

 

라우터 미들웨어를 사용하지 않은 코드. 이 코드를 라우터 미들웨어를 사용한 버전으로 바꾸어 보려고 한다.

 

 

 

대문자 Router()가 라우터 객체, router는 그 객체를 받는 인스턴스

 

 

 

 

라우터 인스턴스로 경로가 같은 것을 다음과같이 설정해 get일 경우, post 일경우 코드를 작성하려고 한다.

밑의 두개의 라우터를 하나의 코드로 정리하는 것

 

 

 

 

완성

 

 

 

 

 

파라미터를 가지는 라우터들 역시 미들웨어로 정리를 했다.

 

 

 

 

최종 완성, 라우터 미들웨어를 사용하지 않았을 때 보다, 더 간단해진 걸 확인할 수 있다.

 

 

 

 

다른 파일에 있는 라우터 미들웨어를 사용

 

routes/contactRoutes.js 안에 라우터 미들웨어가 있을 경우, 그걸 사용하고 싶다면. 그 js 파일에 module.exports로 해당 라우터를 외부에서 사용하겠다는 것을 선언하고.

 

서버를 실행하는 app.js에서 app.use()를 이용해 외부에 있는 미들웨어를 사용할것을 설정한다. 

 

 

 

 

 

contactRoutes 파일 안에 있는 미들웨어의 '/contacts' 경로 부분을 제거한 후 애플리케이션 코드의 app.use() 에 설정한 경로에 '/contacts' 이렇게 설정해도. 같은 결과가 나타난다.

'Node.js' 카테고리의 다른 글

[Node.js] body parser 미들웨어  (0) 2024.03.26
[Node.js] 라우터 미들웨어  (0) 2024.03.26
[Node.js] Thunder Client 사용  (0) 2024.03.26
[Node.js] 라우팅 연습  (0) 2024.03.25
[Node.js] fs 모듈  (1) 2024.03.22

이전까지는 주로 POSTMAN을 사용했는데, VS CODE 안에 확장 프로그램인 Thunder Client를 사용해 보았다.

 

 

 

 

 

VS CODE를 실행하고 네모 버튼을 누르면 확장 프로그램을 설치할 수 있는데, 썬더 클라이언트를 설치하였다.

 

 

 

 

그러면 옆에 번개모양 아이콘이 새로 뜬다. 이걸 이용해서 POST를 실행해보았다.

 

 

 

 

서버를 켜고 POST를 실행해본 결과 올바른 응답값이 온 것을 확인할 수 있다.

 

 

 

 

 

파라미터값을 이용한 결과, PUT과 DELECT를 실행하니 해당 아이디 파라미터값이 응답.

'Node.js' 카테고리의 다른 글

[Node.js] 라우터 미들웨어  (0) 2024.03.26
[Node.js] express 요청 객체, 응답 객체의 속성과 함수  (0) 2024.03.26
[Node.js] 라우팅 연습  (0) 2024.03.25
[Node.js] fs 모듈  (1) 2024.03.22
[Node.js] path 모듈  (0) 2024.03.22

 

req 요청 부분에는 url과 method가 포함되어 있는데, 그것을 변수에 담았다. 해당 메서드가 get이고 url이 /home 일 경우

화면에 home이 보여지게 할 것이고 /about 일 경우 about 나머지는 Not Found

 

 

 

 

 

그 결과 해당 경로로 이동하면 설정한 대로 화면에 보여지는걸 확인할 수 있다.

 

 

 

 

 

express를 이용한 라우팅, 위의 http 방식이랑은 달리 switch 문, if 문을 사용할 필요가 없다.

https://developers.kakao.com/console/app

 

카카오계정

 

accounts.kakao.com

위 주소로 가서 카카오 아이디로 로그인을 한다.

 

 

 

 

 

로그인을 하면 해당 화면을 뜨는데, 애플리케이션을 다음과 같이 원하는 이름과 카테고리 사업자명으로 저장한다.

 

 

 

 

 

 

 

등록한 애플리케이션에 들어가서 플랫폼 카테고리로 간다. WEB 플렛폼 등록을 다음과 같이 해준다. (단순 연습이니 사이트 도메인을 localhost:8080, 127.0.0.1:8080 으로)

 

 

 

 

 

https://apis.map.kakao.com/

 

 

카카오맵 api 사이트이다. web을 선택하면

 

 

 

 

 

 

자바스크립트 api의 스크립트 부분을 복사해서 내 html 에 붙여넣기 한다. (무조건 내가 설정한 자바스크립트 태그의 위에 넣어야 한다.)

 

 

 

 

 

 

developer 사이트로 돌아가서 앱키 카테고리로 간 후, 자바스크립트키를 복붙한다. 그리고 이미 붙여넣은 태그 안에 앱키를 붙여넣기하면 된다.

 

 

 

 

 

크롬에 앱키를 포함한 주소를 주소창에 붙여넣기하고, 그것을 컨트롤 + s 로 추출하여 라이브러리 디렉터리 안에 넣는다. (라이브러리 디렉터리가 없다면 만든다)

 

 

 

 

 

 

자바스크립트 코드를 다음과 같이 설정해놓는다.

 

 

 

 

 

 

카카오 지도 API를 불러온 걸 확인할 수 있다.

 

 

 

 

 

lat과 lng는 지도의 위치. lv는 지도 확대 수준이다. 

 

 

 

 

 

navigator.geolocation.getCurrentPosition() 으로 사용자의 현재 위치를 허용할 것인지 묻고, data를 이용해 사용자의 현재 위치를 불러오게끔 한다.

 

 

 

 

지도의 위치를 옮기면 실시간으로 로컬 저장소에 값들이 저장된다.

 

 

 

 

 

다음 주소 API를 같이 사용하고 있을 경우, geocoder로 주소를 찍었으면 해당 좌표로 이동하게끔 하였고, 표시를 위한 마커도 추가하였다.

'API' 카테고리의 다른 글

[API] 포트원 API 사용하기 (Spring Boot)  (0) 2024.07.11
[API] 카카오 로그인 API 구현  (0) 2024.05.13
[API] 다음 주소 찾기 API  (0) 2024.01.24

fs 모듈

파일을 다루는 모듈이다. 파일을 읽을 수 있고, 저장할 수 있다.

 

 

 

 

예시

 

readdir() 함수는 해당 디렉터리 내에 있는 모든 파일들을 조회하는 역할을 한다. 매개변수로 경로와 콜백 함수를 받는다. 그 결과 디렉터리 내에 모든 파일들을 조회하기 성공!

 

 

 

 

 

 

 

example.txt 라는 파일이 있다. 여기의 내용들을 읽으려고 한다.

 

 

 

 

 

 

그러기 위해서는 fs 모듈의 readFile() 함수를 이용한다. 마찬가지로 경로와 콜백함수가 매개변수로 필요하다. 하지만 이 둘만을 매개변수로 적을 경우 문제가 발생한다. 인코딩을 하지 않았기 때문에 가져온 data 값이 저장된 상태 그대로 가져와지는 것이다.

 

 

 

 

 

 

 

readFile() 매개변수에 인코딩을 지정을 한다면 해당 텍스트의 내용이 data에 제대로 인코딩되어 들어가서 출력된다.

 

 

 

 

 

 

 

원하는 내용을 원하는 파일 이름으로 저장하고 싶다면, writeFile() 함수를 이용한다. 위의 코드를 이용해서 example.txt의 내용들을 data에 담아서 그 내용들을 새로운 파일에 저장해보았다. writeFile() 함수는 만들고싶은 파일과 경로, 내용 값, 에러 콜백함수를 매개변수로 쓴다. 현재 파일의 동일한 디렉터리 안에 test.txt 라는 파일을 만들고, 불러온 data 내용을 저장한 뒤, 콜백 함수로 오류처리를 한 후, 파일이 저장된다.

 

 

 

 

기타

https://nodejs.org/docs/latest/api/modules.html

 

Modules: CommonJS modules | Node.js v21.7.1 Documentation

Modules: CommonJS modules# CommonJS modules are the original way to package JavaScript code for Node.js. Node.js also supports the ECMAScript modules standard used by browsers and other JavaScript runtimes. In Node.js, each file is treated as a separate mo

nodejs.org

더 많은 모듈을 보고 싶다면, nodejs 공식 사이트 내에 모두 정리가 되어 있으니 참고하면 좋다.

 

 

 

path 모듈을 사용하는 이유

경로 구분자를 통일할 수 있다. 윈도우와 맥OS는 경로를 구분할 때가 다른데, 윈도우는 역슬래시(\)를 사용하고 맥OS는 슬래시를 사용한다. 이를 통일하기 위해 path 모듈을 이용한다. 경로를 나누거나 합칠 수 있다.

 

 

 

 

예시

 

먼저 require로 path 모듈을 가져오고, join() 함수을 이용하여 원하는 글자들을 나열하면, 해당 글자들로 경로를 만들 수 있다.

 

 

 

 

 

경로만 추출하고 싶다면, dirname() 함수를 사용한다.

 

 

 

 

 

 

 

현재 코드를 작성하고 있는 js 파일을 불러오기 위해 "__filename" 을 이용했다. 만약 파일 이름만을 추출하고 싶다면,

basename() 함수를 이용한다. 그럼 뒤에 .js 라는 확장자와 함께 파일 이름이 추출된다.

 

 

 

 

 

 

 

확장자를 아예 뺀 순수 파일이름을 추출하고 싶다면, basename() 함수에 빼고싶은 확장자명으로 파라미터를 하나 더 추가한다. 그러면 해당 확장자명을 뺀 순수 파일이름이 추출된다.

 

 

 

먼저 npm init -y로 node.js의 프로젝트를 생성 하고, public 폴더를 만든 후 밑에 html 파일 두개를 만든다.

 

 

 

 

첫번째 사이트의 주소는 "/" 로 하기로 했고, 두번째 사이트의 주소는 "/newTest" 로 하기로 했다.

 

 

 

 

public 폴더 사용을 선언하고, app.get()으로 해당 주소에 접속할 시, res.send()로 원하는 html 창을 띄우게 한다.

그리고 app.listen()으로 특정 포트에서 서버가 실행되도록 하였다.

 

 

 

 

그 결과 로컬호스트 홈페이지로 가면 첫번째 사이트가 뜨고, a태그를 클릭하면 특정 주소의 사이트가 뜬다.

 

 

서버를 운영하다 보면 정기적으로 Job을 싱행해야 하는 경우가 생긴다. 이럴때 사용하는 것이 스케줄러이다.

 

 

 

 

예시

npmjs.com 으로 가서 express 검색 후 설치하고, node-schedule 역시 검색후 설치한다 ( npm i node-schedule )

 

express와 schedule을 변수에 불러오고. express 서버를 실행시키고, schedule.scheduleJob을 이용하여 스케줄을 설정한다. ' * * * * * * ' 은 매 초마다 이를 실행시키겠다는 의미이다.

 

 

 

 

터미널에서 node app으로 실행한 결과, 매 초마다 console.log에 날짜가 뜬다. 

 

 

 

 

 

출처 : https://codegear.tistory.com/62

스케줄을 설정하는 법은 다음과 같습니다.

*    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    │
│    │    │    │    │    └ day of week (0 - 7) (0 or 7 is Sun)
│    │    │    │    └───── month (1 - 12)
│    │    │    └────────── day of month (1 - 31)
│    │    └─────────────── hour (0 - 23)
│    └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)

앞에서 부터 초, 분, 시, 일, 월, 요일의 순입니다.

지속적인 실행은 *를 사용하면됩니다.

특정 시간에 실행하는 것은 아래와 같이 작성하면됩니다.

  • 매초 실행 : * * * * * *
  • 매분 실행 : * * * * *
  • 매분 0초에 실행 : 0 * * * * *
  • 매분 10초에 실행 : 10 * * * * *
  • 매시 1분 10초에 실행 : 10 1 * * * * 

+ Recent posts