본문 바로가기
개발 이야기/NodeJS

NodeJS MongoDB 연동하기

by 농개 2018. 6. 30.
반응형

(NodeJS, Yarn, MongoDB 설치됨)


먼저 프로젝트를 생성.(React프로젝트 할꺼기 때문에 create-react-app으로 생성해봄)

원하는 디렉토리가서 cmd창 열고, 아래와 같이 명령어 치면 된다.

C:\mynode>create-react-app simpleboard


프로젝트 명은 대문자 입력이 안됨.. 이러면 기본적인 react project 폴더와 module들이 생성된다.


기본적으로 위와 같은 구조로 프로젝트가 생성된다. 파란색 표기 부분처럼 server(express + mongodb)를 따로 폴더를 둬서 관리.


먼저, /server/main.js를 아래와 같이 만든다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var api = require('./routes/index');
 
//conncet to mongodb server
var db = mongoose.connection;
db.on('error'console.error);
db.once('open'function(){
  console.log('connected mongodb server!');
});
 
mongoose.connect('mongodb://localhost/test');
 
const port = 4000;
 
//bodyParser setting
app.use(bodyParser.urlencoded({
  extended: true
}));
app.use(bodyParser.json());
app.use('/api', api);
 
app.listen(port, () => {
  console.log('Express is listening on port', port);
});
 
 
 
cs



필요한 모듈들을 require 해준다. (아, 그전에 express, body-parser, mongoose를 패키지 dependency에 추가해줘야한다.

cmd로 npm install --save express body-parser mongoose 쳐주면된다.)


그리고 mongodb server를 커넥트 하고, app(express 인스턴스)을 위와 같이 셋팅 해주었다.

api는 모든 db요청을 받는(?) 인스턴스이다.


그 다음, model 스키마를 정의 해야한다.

/models/board.js를 아래와 같이 만들자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var mongoose = require('mongoose');
 
const Schema = mongoose.Schema;
 
const Board = new Schema({
  writer : String,
  contents : String,
  date: {
    created : {type:Datedefault:Date.now},
    edited : {type:Datedefault:Date.now}
  },
  is_edited : {type:Booleandefault:false}
})
 
module.exports = mongoose.model('board',Board);
 
cs


위와 같이 스키마를 선언해주었다. (이 후, data를 insert하면 boards라는 이름의 collection이 자동 생성된다. 뒤에 -s가 붙는데... 규약같은게 있나보다...)


/routes/board.js 를 아래와 같이 만든다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var express = require('express');
var Board = require('../models/board');
var mongoose = require('mongoose');
 
const router = express.Router();
 
router.post('/', (req, res) => {
  if (req.body.username === "") {
    return res.status(400).json({
      error: "EMPTY USERNAME",
      code: 2
    });
  }
 
  if (req.body.contents === "") {
    return res.status(400).json({
      error: "EMPTY CONTENTS",
      code: 2
    });
  }
 
  let board = new Board({
    writer: req.body.username,
    contents: req.body.contents
  });
 
  board.save(err => {
    if (err) throw err;
    return res.json({ success: true });
  });
});
 
module.exports = router;
 
cs


우선 POST요청(쓰기)만 대충 구현하였다.


/routes/index.js


1
2
3
4
5
6
7
8
var express = require('express');
var board = require('./board');
 
const router = express.Router();
router.use('/board',board);
 
module.exports =  router;
 
cs


url은 board로 설정하였다. (최종적으로, /api/board/* 가 될 것이다.)


실행 해보자.


연결 성공했다.

그리고 post man을 이용해서 post요청 하나 해보면 data가 들어갈 것이다.



데이터가 들어간걸 확인 할 수 있다.




반응형