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 |
댓글