본문 바로가기

웹 개발/Node.js

내가 보려고 작성하는 [라우터 모듈화 summary] +dotenv, koa,koa-router

라우터 모듈화 summary

** router 를 사용하는 공식적인 방식이 아니라 제가 사용하는 편한 방식을 정리해 둔 것입니다. 


1. 백엔드 루트 디렉토리에 dotenv 설치 후 .env 파일 생성 

  • .env 파일에 포트 넘버를 설정해줍니다. 
// 백엔드 루트 디렉토리
$ npm install dotenv --save


2. src/index.js(or main.js) 파일에 필요한 모듈 임포트 후 서버 생성 및 라우터 설정 

// src/index.js
require('dotenv').config();
import Koa from 'koa';
import Router from 'koa-router';
import bodyParser from 'koa-bodyparser';

 

  • nodejs에서 process.env로 환경변수를 조회할 수 있습니다. 
const { PORT, ...(설정 필요한 환경 변수 ex) DB URI) } = process.env;

 

  • Koa로 서버를 생성합니다.
const app = new Koa();

const port = PORT || 4000;
app.listen(port, () => { console.log('Listening to port %d', port); });

 

3. src/api 디렉토리 생성 후 주요 기능 별 디렉토리 구분 

  • 전체적인 디렉토리 구조는 다음과 같습니다. 
backend-root-directory
├── node_modules
├── .env
├── package.json
│  ...
├── src
│   ├── api
│ 	│   ├── index.js
│ 	│   ├── feature1
│ 	│   │ 	├── feature.ctrl.js
│ 	│   │ 	├── index.js
│ 	│   ├── feature2
│ 	│   ├── ...
│   ├── models
│ 	│   ├── model_schema1
│ 	│   ├── model_schema2
│ 	│   ├── ...
│   └── index.js
└── README.md

 

  • src/api/feature1/index.ctrl.js 파일을 만들고 필요한 기능을 작성합니다.  

다음은 회원가입, 로그인, 로그아웃 구현을 위한 feature api control 파일 예시입니다. 각 함수들은 모두 ../index.js 파일에서 사용해야 하기 때문에 반드시 export 키워드를 붙여주어야 합니다.

..

export const register = async ctx => {
    ...
};

export const login = async ctx => {
	...
};

export const check = async ctx => {
	...
};

export const logout = async ctx => {
	...
};

 

  • src/api/feature1/index.js 파일을 만들고 컨트롤 파일을 임포트해서 라우터를 설정해줍니다. 

다음 코드는 위 컨트롤 파일 예시를 이용해서 라우터를 설정합니다.

새로운 라우터 인스턴스를 생성하고, post/get/delete 등의 http 메소드 함수로 경로 명을 첫번째 파라미터로, 컨트롤 파일에서 해당 라우터에서 실행할 함수를 두번째 파라미터로 전달합니다.

ㅡ리고 이 파일에서 생성한 라우터를 export default 해줍니다. 

import Router from 'koa-router';
import * as feature1Ctrl from './feature1.ctrl';

const feature1 = new Router();

feature1.post('/register', feature1Ctrl.register);
feature1.post('/login', feature1Ctrl.login);
feature1.get('/check', feature1Ctrl.check);
feature1.post('/logout', feature1Ctrl.logout);

export default feature1;

 

4.src/index.js(or main.js) 파일에서 router 불러와서 사용

  • 라우터를 설정한 디렉토리를 불러옵니다. 
...
import Router from 'koa-router';
import api from './api';
...

 

  • 새로운 라우터 인스턴스를 생성하고 서버가 이 라우터를 사용할 수 있게 합니다. 
const router = new Router();
router.use('/api', api.routes());
app.use(bodyParser());
app.use(router.routes()).use(router.allowedMethods());

 

5. postman을 이용해서 api 작동 여부 확인

  • get 이외의 http 메소드는 브라우저에 주소를 입력하는 것만으로는 확인할 수 없습니다. 그래서 postman을 이용합니다. 
 

Postman | The Collaboration Platform for API Development

Postman makes API development easy. Our platform offers the tools to simplify each step of the API building process and streamlines collaboration so you can create better APIs faster.

www.postman.com

ex) POST 를 확인하려는 경우, 설정한 전달 파라미터를 JSON 형식으로 전달하고 제대로 응답이 오는지 확인합니다. 

 


src/index.js 전체 코드 example

더보기
require('dotenv').config();
import Koa from 'koa';
import Router from 'koa-router';
import bodyParser from 'koa-bodyparser';
import api from './api';

// process.env : node js 에서 환경변수 조회 
const { PORT, MONGO_URI } = process.env;

const app = new Koa();
const router = new Router();

router.use('/api', api.routes());
app.use(bodyParser());
app.use(router.routes()).use(router.allowedMethods());

const port = PORT || 4000;
app.listen(port, () => { console.log('Listening to port %d', port); });

'웹 개발 > Node.js' 카테고리의 다른 글

라우터 모듈화 koa-router  (0) 2021.02.25
Node.js로 백엔드 프로젝트 시작하기 (+ Koa)  (0) 2021.02.25
nodemon 사용하기  (0) 2021.02.24