본문 바로가기
개인 프로젝트

Step 2. MongoDB 연결 및 기본 코드 변경

by korea_musk 2022. 10. 3.

1. mongoDB를 연결시켜주기

mongoDB 계정과 npm install mongoose 를 해주었으면

app.js 에 연결시켜준다.

app.js

const mongoose = require("mongoose");

mongoose.connect(process.env.DB_CONNECT, {useNewUrlParser: true, useUnifiedTopology: true}, function(err){
  if(err){
    console.error("DB 오류", err);
  }
  console.log("DB 성공");
})

process.env.DB_CONNECT 부분은 npm install dotenv -> .env 파일 생성

.env 파일
DB_CONNECT = mongodb+srv://test:여기에 패스워드@cluster0.3twxunn.mongodb.net/?retryWrites=true
 
민감한 부분이나 정리하면 좋을 것을 넣어두고 사용하면 된다.
 
npm start 를 해봤을 때 DB성공이라고 뜨면 연결이 완료된 것이다.
 
 
mongoDB를 이용하기 위해 models 파일을 만들고 안에 todoTask.js 파일을 만든다.
 
mongoDB의 구조를 만들기 위한 파일이다.
 
const mongoose = require('mongoose'); //mongoose 모듈 불러오기

const todoTaskSchema = new mongoose.Schema({ //데이터 구조 정의
  content: {
    type: String,
    require: true
  },
  date: {
    type: String,
    require: true
  }
})

module.exports = mongoose.model('TodoTask', todoTaskSchema); //다른 파일에서 사용할 이름 설정
 
 
 

2. app.js 정리 및 기본 코드 변경

처음에는 view engine setup 부분에 jade로 되어있는데 ejs로 바꾸어주고 views 부분에 있는 파일 확장자를

모두 ejs로 바꾸어 주면 된다.

app.js

const dotenv = require('dotenv');
const mongoose = require('mongoose');
const bodyParser = require("body-parser");\

dotenv.config(); //dotenv 이용

app.use(bodyParser.urlencoded({extended: false})); //body-parser 이용
app.use(bodyParser.json());

설치해준 모듈을 연결시켜준다.

app.js

const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');
// 밑으로 바꿔줌
const router = require("./routes/index"); // routes/index -> routes/todo
app.use(router);

 

routes/index.js

const express = require("express");
const app = express();
const router = express.Router();

// Todo Router
const TodoRouter = require('./todo');

// Refactoring
router.use("/todo", TodoRouter);

module.exports = router;

app.js -> index.js -> todo.js 로 간다. 

index.js에는 routes 파일이 추가될 경우 관리 목적으로 사용한다.

 

routes/todo.js

const express = require('express');
const app = express();
const router = express.Router();

const controller = require("../controllers/todo");

//read
router.get("/", controller.read);
//write
router.post('/write', controller.write);
//edit
router.get("/edit/:id", controller.edit);
//update
router.post('/update/:id', controller.update);
//remove
router.get('/remove/:id', controller.remove);

module.exports = router;

index와 유사하지만 controller이란 것을 사용한다. 

todo 파일에서도 CRUD 을 구현해주어도 되지만,

모듈화를 위해서 분리해서 작성한다.(큰 프로젝트로 갈 경우 이렇게 하는게 좋다고 합니다.)

 

controllers 파일을 만들어

안에 todo.js 파일을 만들어준다.

controllers/todo.js

const TodoTask = require('../models/todoTask'); // 만든 DB 구조를 불러왔다.

// time setting 작성 시간을 저장한다.
var moment = require('moment-timezone');
moment.tz.setDefault("Asia/seoul");
//메인 페이지
exports.get = function(req, res){
  console.log("todo");
  TodoTask.find({}, null, {sort: {date: -1}}, (err, tasks) => { //find함수
    res.render("todo", { todoTasks: tasks });
  });
};

 

적기 write

controllers/todo.js

exports.write = async function(req, res){
  try{
    const todoTask = new TodoTask({
      content: req.body.content,
      date: moment().format("YYYY-MM-DD HH:mm:ss")
    });
    await todoTask.save();
    console.log("성공");
    console.table([{ id: todoTask._id, content: todoTask.content, date: todoTask.date }]);
    res.redirect("/todo");
  }catch(err){
    console.error("실패");
    res.redirect("/todo");
  }
};

edit 편집

//edit
exports.edit = function(req, res){
  const id = req.params.id;
  TodoTask.find({}, null, {sort: {date: -1}}, (err, tasks) => {
    res.render("todo-edit", { todoTasks: tasks, idTask: id });
  });
};

update 

//update
exports.update = function(req, res){
  const id = req.params.id;
  TodoTask.findByIdAndUpdate(id, { content: req.body.content }, err => {
    if (err) {
      console.log("실패");
      console.error(err);
    }
    console.log("성공");
    console.log("id: " + id + "\nchange content: " + req.body.content);
    res.redirect("/todo");
  });
};

remove 삭제

//remove
exports.remove = function(req, res){
  const id = req.params.id;
  TodoTask.findByIdAndRemove(id, err => {
    if (err) {
      console.log("실패");
      console.error(err);
    }
    console.log("성공");
    console.log("id: " + id);
    res.redirect("/todo");
  });
};

 

 

'개인 프로젝트' 카테고리의 다른 글

Step 3. ejs 파일 완성  (1) 2022.10.03
Step1-1 nodeJS에서 mongoDB 사용  (0) 2022.09.27
Step1. To_Do 웹 만들기 구상 및 설계  (2) 2022.09.22

댓글