카테고리 없음

mac mongodb 설치 후 nodejs 연결

seongjin08 2022. 5. 19. 14:41

몽고디비 설치

 

$ brew update

$ brew tap mongodb/brew

$ brew install mongodb-community

$ brew services start mongodb-community

$ mongo

몽고디비 설치 완료

계정 추가 

$ use admin

$ db.createUser({ user:'아이디' , pwd:'비번', roles:['root']})

successfully added user  가 뜨면 정상정으로 만들어 진거다.프로젝트 생성

 

프로젝트 생성

 

$ npm install express-generator -g

$ express [프로젝트 이름]

 이렇게 express 프로젝트가 생성된다.

 

$ npm install

$ npm start

 

$ npm install mongoose

schemas/index.js

const mongoose = require('mongoose');

const connect = () => {
  if (process.env.NODE_ENV !== 'production') {
    mongoose.set('debug', true);
  }

  mongoose.connect('mongodb://root:root@localhost:27017/admin', {
    dbName: 'mongo',
    // useNewUrlParser: true,
    // userCreateIndex: true,
  }, (error) => {
    if (error) {
      console.log('몽고디비 연결 에러', error);
    } else {
      console.log('몽고디비 연결 성공');
    }
  });
}

mongoose.connection.on('error', (error) => {
  console.error('몽고디비 연결 에러', error);
});

mongoose.connection.on('disconnected', () => {
  console.error('몽고디비 연결이 끊겼습니다. 연결을 재시도 합니다');
  connect();
});

module.exports = connect;

 

schema/users.js

const mongoose = require('mongoose');

const { Schema } = mongoose;
/**
 * 이름, 나이, 결혼여부, 자기소개, 생성일
 */
const userSchema = new Schema({
  name: {
    type: String,     // 자료형
    required: true,   // 필수 여부
    unique: true,     // 고유 값
    default: true,
  },
  age: {
    type: Number,
    required: true,

  },
  married: {
    type: Boolean,
    required: true
  },
  comment: {
    type: String
  },
  createdAt: {
    type: Date,
    default: Date.now
  }
})

module.exports = mongoose.model('User', userSchema);

schema/comment.js

const mongoose = require('mongoose');

const { Schema } = mongoose;
/**
 * 작성자, 댓글내용, 생성일
 */
const { Types: ObjectId } = Schema;
const commentSchema = new Schema({
  commenter: {
    type: ObjectId,
    required: true,
    ref: 'User'      // User Schema의 아이디
  },
  comment: {
    type: String,
    requried: true,
  },
  createdAt: {
    type: Date,
    default: Date.now,
  }
})

module.exports = mongoose.model('Comment', commentSchema);

app.js

app.js 파일에  connnect 를 불러와서 connect() 함수를 실행시키는 구문

추가 후 npm start 

하면 잘 작동하는걸 확인 할 수있다.

 

routes/index.js

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

router.use('/users',require('./users'))
router.use('/comment',require('./comment'))

module.exports = router;

 

routes/users.js

const express = require('express');
const router = express.Router();
const User = require('../schemas/users');

// 사용자 전체 조회
router.get('/', (req, res, next) => {
  User.find()
    .then((users) => {
      res.json(users);
    })
    .catch((err) => {
      console.error(err);
      next(err);
    })
});

// 유저 생성
router.post('/', (req, res, next) => {
  const user = new User({
    name: req.body.name,
    age: req.body.age,
    married: req.body.married
  })
  user.save()
    .then((result) => {
      res.json(result);
    })
    .catch((err) => {
      console.error(err);
      next(err);
    })
})

module.exports = router;

 

routes/comment.js

const express = require('express');
const router = express.Router();
const Comment = require('../schemas/comment');

// 사용자의 댓글 전체 조회
router.get('/:id', (req, res, next) => {
  Comment.find({ commenter: req.params.id })
    .then((users) => {
      res.json(users);
    })
    .catch((err) => {
      console.error(err);
      next(err);
    })
});

// 댓글 생성
router.post('/', (req, res, next) => {
  const post = new Comment({
    commenter: req.body.id,
    comment: req.body.comment,
  })
  post.save()
    .then((result) => {
      res.json(result);
    })
    .catch((err) => {
      console.error(err);
      next(err);
    })
});

// 댓글 수정
router.patch('/:id', (req, res, next) => {
  // id의 댓글을 수정해라
  Comment.update({ id: req.params.id }, { comment: req.body.comment })
    .then((result) => {
      res.json(result);
    })
    .catch((err) => {
      console.error(err);
      next(err);
    })
});

// 댓글 삭제
router.delete(':/id', (req, res, next) => {
  Comment.remove({ id: req.params.id })
    .then((result) => {
      res.json(result);
    })
    .catch((err) => {
      console.error(err);
      next(err);
    })
})

module.exports = router;

이렇게 작성하고 테스트해보자.