Will find a way

[Express] Express로 하는 MVC 패턴 예제 (feat. MongoDB) 본문

BackEnd/Express

[Express] Express로 하는 MVC 패턴 예제 (feat. MongoDB)

Jaka_Park 2025. 2. 23. 15:31

 

https://jakapark.tistory.com/68

 

[디자인 패턴] MVC 패턴에 대해서 간단히 알아보는 글

들어가기 전백엔드와 DB 기본을 공부하던 중 기초 디자인 패턴중인 MVC 패턴에 대해서 알게 됐다. 디자인 패턴이란 기존 환경 내에서 반복적으로 일어나는 제들을 어떻게 풀어나갈 것인가에 대

jakapark.tistory.com

 

며칠 전에 MVC 패턴에 대해서 알아보았다. (윗글 참고)

오늘은 MVC 패턴 예제 코드를 작성해보려고 한다.

 

MVC에 대해서 간단히 알아보자면

Model : 데이터를 처리
View : 유저가 보이는 화면
Controller : Model과 View를 이어주며 유저의 요청을 담당한다

 

.env 파일

DB_CONNECT = "MongoDBURI"

Config.js [./config/dbConnect.js]

// mongoose를 이용하여 MongoDB 연결
const dbConfigure = async () => {
  try {
    const connect = await mongoose.connect(process.env.DB_CONNECT);
    console.log("DB Connection Success")
  } catch(err) {
    console.log("DB Connection Fail")
  }
}

module.exports = dbConfigure;

app.js (엔드포인트 파일)

const express = require("express");
const dbConnect = require("./config/dbConnect")
const mongoose = require("mongoose");

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

require("dotenv").config();

// view engine 사용
app.set("view engine", "ejs");
app.set("views", "./views");

// mongoDB 연결
dbConnect();

// routing
app.get("/", (req, res) => {
  res.send("Hello World");
});

// Middleware 추가
app.use(express.json()); // body에서 json 데이터를 추출하여 사용 가능
app.use(express.urlencoded({extended: true}));

// 라우팅 미들웨어
app.use("/contacts", require("./routes/contactRoutes"));

// Server 연결
app.listen(3000, () => {
  console.log("Server On~~~");
});

라우트 처리 / routes.js [./routes/routes.js]

const express = require("express");
const { getAllContacts, createContact } = require("../controllers/Controller");
const router = express.Router();

router.route("/").get(getAllContacts).post(createContact);
router.route("/:id").get((req, res) => {
  res.send(`${req.params.id} 리스트 확인`);
});

module.exports = router;

모델 / model.js [./models/models.js]

const mongoose = require("mongoose");

const shema = new mongoose.Schema(
  {
    name: {
      type: String,
      required: true
    },
    email: {
      type: String
    },
    phone: {
      type: String,
      required: [true, "전화번호를 꼭 입력해주세요!"]
    },
  },
  { timestamps: true }
);

// 스키마 -> 모델
const Contact = mongoose.model("Contact", schema);

module.exports = Contact;

 

컨트롤러 / controller.js [./controller/controller.js]

const Contact = require("../models/Model");

const getAllContacts = async (req, res) => {
  res.send("Contacts Page");
};

const createContact = async (req, res) => {
  const { name, email, phone} = req.body;
  
  if( !name || !email || !phone ){
    return res.send("필수 값이 입력되지 않았다.");
  }
  const contact = await Contact.create({ name, email, phon });
  res.send("Create Contacts");
};

module.exports = { getAllContacts, createContact };

 

View (ejs 파일 생략)

'BackEnd > Express' 카테고리의 다른 글

CORS (Cross-Origin Resource Sharing)에 대해서  (0) 2025.02.24
[NodeJS/Express] Express에 대해서  (0) 2024.06.29