[Node.js] MongoDB 연결 및 서버 개발 환경 구축

모든 API 는 async await 을 사용해 구분한다.

 

MongoDB 연결 유틸리티 만들기

API 호출시 데이터를 저장, 조회, 삭제하려면  DB와 연결해야한다.

몽고디비 커넥션을 반환하는 유틸리티 함수를 만들어서 사용

 

 

mongodb-connection.js

const {MongoClient}	= require('mongodb');
const url = "mongodb+srv://wjdwwidz:<비밀번호>@cluster0.5fd3khr.mongodb.net/board"
module.exports = function(callback){
	return MongoClient.connect(url, callback);
}

 

app.js

...

let collection;
app.listen(3000, async()=>{
	console.log("http://localhost:3000 Server Start");
	const mongoClient = await mongodbConnection();
	collection = mongoClient.db('board').collection("post");
	//db()를 통해 데이터베이스 선택, collection("post") 를 사용해 컬렉션을 선택
    	//기본 db를 board로 설정해두어 인자로 전달하지 않아도 동일한 기능
	console.log(`MongoDB Connected`);
});

 

 

 

 

커스텀 핸들바 생성 및 엔진 반환

핸들바의 장점이자 단점은 자유도가 높다는 것

매우 기본적인 헬퍼 함수 외의 모든 것들은 커스텀 헬퍼 함수로 구현해야 한다. 

 

 

게시판 프로젝트에서 필요한 커스텀 함수는 다음과 같다.

 

1. 리스트 길이 구하기 

2. 두 값이 같은지 비교

3. ISO데이터 포맷에서 날짜만 뽑아내는 함수 

 

 

handlebars-helpers.js

module.exports = {
	//기본값으로 빈 배열을 주어 null 이 아닌 0을 반환하도록 함
	lengthOfList: (list = []) => list.length,
	eq:(val1,val2) => val1 === val2,
	dateString: (isoString) => new Date(isoString).toLocaleString(),
};

*iso 문자열 : YYYY-MM-DDTHH:mm:ss.sssZ

toLocaleString 로케일의 형식에 맞게 문자열로 변환

 

module.exports = {
  key1: value1,
  key2: value2,
  // ...
};

* 문법

 

app.js

app.engine(
	"handlebars", 
	handlebars.create({helpers: require("./configs/handlebars-helpers"),}).engine); //핸들바 생성 및 엔진 반환

 

handlebars.create() 메서드를 호출하여 handlebars엔진을 생성하고,

다시 app.engine()메서드에 전달하여 express 애플리케이션에 등록

 

 

Nodemon 설정

코드 저장시 서버를 자동으로 재시작되는 nodemon 패키지를 설치하고 적용 

npm install nodemon

 

package.json

"scripts": {
    "start": "npx nodemon app.js"
  },

 

이후 npm start로 실행 가능