라우터 미들웨어

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 문을 사용할 필요가 없다.

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 * * * * 

라우팅 분리

index.js 에서 app.get(), app.post() 등등 라우터가 많아질 경우 index.js 파일이 길어지는 문제가 발생한다. 그럴 경우 라우터를 여러개의 용도에 따라 분리해서 index.js 로 불러와서 쓸 수 있다. ( app.use() 를 이용 )

 

 

 

예시

우선 npm i express 로 express 다운로드

각 각의 라우터들을 저장할 router.js 파일들을 만들고, index.js 파일 역시 만든다.

 

 

 

express를 불러와서 라우터를 정의한다. 그리고 module.exports로 다른 js 파일에서 불러올 수 있게 한다.

 

 

 

실행할 index.js 파일이다. app.listen 으로 포트 설정 및 서버를 만들고, app.use()로 각 각의 라우터들을 불러온다.

앞에 경로를 설정하여 어느 주소에서 저 라우터를 실행할 지 지정하면 된다.

터미널에서 nodemon index 로 서버를 켠다.

 

 

 

 

 

설정한 각 주소마다 해당 라우터들이 호출되어 화면에 글자들이 표시된다.

라우터레벨 미들웨어

express.Router()를 사용하면 라우터 레벨의 미들웨어를 사용할 수 있다.

위 처럼 라우터에서도 use와 method를 사용할 수 있다.

 

 

 

 

 

오류 처리 미들웨어

오류 처리 미들웨어는 function의 parameter 첫번째 인자로 error를 받아 처리한다.

 

 

 

 

 

기본 제공 미들웨어

정적 모듈 처리 static 미들웨어

 

express에서 기본적으로 제공하는 미들웨어가 있는데 그 중 정적 모듈을 처리하는 static 미들웨어가 있다.
우선 public 폴더 안에 nodejs.png 사진 파일을 넣었다. 그리고 그것을 불러오고 싶을 때 다음과 같이 코드를 설정한다.

 

 

 

로컬호스트 경로로 가면 png 파일이 불러오는 것을 확인할 수 있다.

 

 

 

 

 

html 파일도 가능하다. public 폴더 밑에 해당 html 파일을 만든 후 로컬호스트 다음 경로로 가 보면 해당 html 파일이 불러진다.

 

 

 

 

public 폴더 안에 images 폴더를 만든 후 그 안에 그림 파일을 넣으면 경로를 다음과 같이 설정해야 한다.

 

 

 

 

 

써드 파티 미들웨어

  • express에서는 다양한 써드파티 미들웨어를 사용할 수 있습니다.
  • 필요한 기능에 따라 npm install을 사용하여 모듈을 설치하여 사용합니다.
  • 아래는 쿠키 구문 분석 미들웨어인 cookie-parser의 사용 방법 입니다.
  • 우선 cookie-parser 설치합니다.
npm install cookie-parser
  • 사용법은 다음과 같습니다.
var express = require('express');
var app = express();
var cookieParser = require('cookie-parser');

// load the cookie-parsing middleware
app.use(cookieParser());
  • 써드파티 미들웨어는 다음 링크에서 확인할 수 있습니다.

https://expressjs.com/ko/resources/middleware.html

 

Express 미들웨어

Express 미들웨어 목록에 적힌 Express 미들웨어 모듈들은 Expressjs 팀이 유지보수합니다. 미들웨어 모듈 설명 내장 함수 (Express 3) body-parser HTTP 요청 body를 파싱합니다. body, co-body, 그리고 raw-body도 참

expressjs.com

 

 

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

 

NodeJS기초-10.Express 서버 만들기2-미들웨어

아래는 이 글의 동영상 강의입니다. https://youtu.be/ceNqxXQMuKw * 본 문서는 아래 사이트를 참고하여 작성하였습니다. https://expressjs.com/ko/guide/using-middleware.html Express 미들웨어 사용 미들웨어 사용 Expres

codegear.tistory.com

 

+ Recent posts