주소록 - 프로젝트 생성 및 mongoose로 DB 연결

소스코드

이 게시물에는 코드작성이 포함되어 있습니다. 소스코드를 받으신 후 진행해 주세요. MEAN Stack/개발 환경 구축에서 설명된 프로그램들(git, npm, atom editor)이 있어야 아래의 명령어들을 실행할 수 있습니다.

git clone https://github.com/a-mean-blogger/contact-book.git
cd contact-book
git reset --hard 1c23437
npm install
atom .

- Github에서 소스코드 보기: https://github.com/a-mean-blogger/contact-book/tree/1c23437195c47545b3d60785223271bf497147aa


이번 포스팅에서는 주소록을 만들기 위해 새 프로젝트를 생성하고 mongoose로 DB를 연결합니다.
이번 강의를 진행하기 전에 이전 강의(mlab.com가입 및 온라인 Mongo DB 생성)에서 생성한 DB uri를 환경변수로 MONGO_DB에 저장해 주세요.

  • Mongoose는 mongoDB와 node.js를 연결해 주는 ORM library입니다.

프로젝트 생성

프로젝트 폴더를 만들고 npm init으로 package.json을 생성해 줍니다.

Is this ok? (yes)에서 다음으로 넘어가지 않는 경우 ctrl + c를 눌러서 중단해 주세요.

아래 명령어를 입력하여 atom 에디터를 실행해 줍니다.

$ atom .

폴더구조

index.js만 생성합니다.(.gitingore, README.md는 github을 위해 생성한 파일입니다. 만드시지 않으셔도 됩니다.)

Package 설치

아래 명령어를 사용하여 ejs, express, mongoose 세개의 package를 한번에 설치해 줍시다.

$ npm install --save ejs express mongoose

코드

var express = require("express");
var mongoose = require("mongoose");
var app = express();

// DB setting
mongoose.connect(process.env.MONGO_DB, { useNewUrlParser: true }); // 1
var db = mongoose.connection; // 2
// 3
db.once("open", function(){
 console.log("DB connected");
});
// 4
db.on("error", function(err){
 console.log("DB ERROR : ", err);
});

// Other settings
app.set("view engine", "ejs");
app.use(express.static(__dirname+"/public"));

// Port setting
var port = 3000;
app.listen(3000, function(){
 console.log("server on! http://localhost:"+port);
});

나머지는 Hello World!강의에서 설명된 내용이고, DB setting 부분만 살펴보겠습니다.

1. 환경변수에 저장된 값을 사용하여 mongoDB에 접속합니다. useNewUrlParser은 옵션인데, Mongoose 5 버전에서 필요합니다. 이부분이 빠지면 경고 메세지가 출력됩니다.

2. mongoose의 db object를 가져와 db변수에 넣습니다.

3. db가 성공적으로 연결된 경우 "DB connected"를 출력합니다.

4. db연결중 에러가 있는 경우 "DB ERROR : " 과 에러를 출력합니다.

실행결과

이번부터는 nodemon을 사용해 서버를 실행하겠습니다.
우선 아래 명령어로 nodemon을 설치해 주세요.

$ npm install --global nodemon

서버를 실행합니다.

$ nodemon


아직 route을 생성하지 않았으므로 브라우저에는 아무 내용이 뜨지 않지만 console에 DB가 정상적으로 접속이 된 것을 알 수 있습니다.

만일 에러가 있다면

$ printenv

를 입력해서 해당 환경변수가 제대로 설정되어 있는지, DB uri 값이 정확한지를 확인해 주세요.

마치며..

이제 DB가 연결되었으니 활용을 해야겠죠?
다음강좌는 DB활용에 대한 기본적인 이론을 알아보고 실습을 하겠습니다.

댓글

오오구 (오구) 2016.10.13
mongoose.connect(process.env.MONGO_DB); 이 부분에서 DB정보값을 환경변수로 등록을 해뒀는데 참조해오지 못합니다. 혹시 위에 설명하신 부분외 별도의 설정이 더 필요한가요?
I
Ian H 2016.10.17
@오오구 (오구),
환경변수 설정후 터미널 재시작해주셔야 하는데, 혹시 재시작하셨나요?
임성훈 2016.10.14
DB ERROR :  { [MongoError: failed to connect to server [>:27017] on first connect]   name: 'MongoError',   message: 'failed to connect to server [>:27017] on first connect' }
간단한 코드라 계속 블로그 보면서 확인하면서 해봤는데 뭐가 잘못됐는지 잘 못찾겠네요 ㅜㅜ 구글링해도 잘 안나오는거 같고 뭐가 문제일까요???ㅜㅜ
임성훈 2016.10.14
환경변수 말고 uri 그대로 써도 실행이 안되네요 환경변수 문제는 아닌거 같아요 ㅜㅜ
I
Ian H 2016.10.17
@임성훈,
환경변수 문제는 아니네요.. mlab 사용하시나요? 아니면 local 사용하시나요?
W
WebLog 2016.10.19
@Ian H,
위에 글 보고 mlab 사용합니다... 계속 문제가 뭔지 찾아봐야겠네요~
권유성 2016.10.15
$ nodemon [nodemon] 1.11.0 [nodemon] to restart at any time, enter `rs` [nodemon] watching: *.* [nodemon] starting `node index.js` fuck! Server On! DB ERROR :  { MongoError: failed to connect to server [undefined:27017] on fi                                                        rst connect     at Pool.<anonymous> (C:\Users\Mycom\documents\workspace\contact-book\node                                                        _modules\mongodb-core\lib\topologies\server.js:313:35)     at emitOne (events.js:96:13)     at Pool.emit (events.js:188:7)     at Connection.<anonymous> (C:\Users\Mycom\documents\workspace\contact-boo                                                        k\node_modules\mongodb-core\lib\connection\pool.js:260:12)     at Connection.g (events.js:291:16)     at emitTwo (events.js:106:13)     at Connection.emit (events.js:191:7)     at Socket.<anonymous> (C:\Users\Mycom\documents\workspace\contact-book\no                                                        de_modules\mongodb-core\lib\connection\connection.js:162:49)     at Socket.g (events.js:291:16)     at emitOne (events.js:96:13)     at Socket.emit (events.js:188:7)     at connectErrorNT (net.js:1020:8)     at _combinedTickCallback (internal/process/next_tick.js:74:11)     at process._tickCallback (internal/process/next_tick.js:98:9)   name: 'MongoError',   message: 'failed to connect to server [undefined:27017] on first connect' } 위처럼 뜨던것을 //mongoose.connect(process.env.MONGO_DB); // 환경변수에 저장된 값을 사용하여 mongoDB에 접속 을 mongoose.connect("mongodb://<이름>:<비번>@ds011820.mlab.com:11820/kys_db"); 그냥 지정해주니까 되네요  connect(process.env.MONGO_DB); <-- 예가 나쁜놈입니다.  그런데 저거 해결할려면 어떻게 해야하나요?
I
Ian H 2016.10.17
@권유성,
환경변수 설정후 터미널 재시작해주셔야 하는데, 혹시 재시작하셨나요?
권유성 2016.10.19
@Ian H,
ㅎㅎ 껏다 키니 되네요 부끄럽습니다.
S
Sean Park 2016.11.07
nodemon을 설치하고 실행했더니 command not found가 뜨네요;; 흑흑
I
Ian H 2016.12.02
@Sean Park,
ubuntu 사용해서 그럴까요 ㅠㅠ? 검색한번 해보세요
Deleted Comment
댓글쓰기

이 글에 댓글을 다시려면 SNS 계정으로 로그인하세요. 자세히 알아보기

UP