라우터 모듈화 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을 이용합니다.
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 |