0915
기존의 모듈화에서 라우터 부분만 남겨두고 나머지 모든 기능 부분을
controllers 라는 폴더를 생성해서 분리
MVC패턴과 비슷
MVC 는 Model, View, Controller의 약자.
하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세가지로 구분한 패턴.
사용자가 보는 페이지, 데이터처리, 그리고 이 2가지를 중간에서 제어하는 컨트롤
이 3가지로 구성되는 하나의 애플리케이션을 만들면
각각 맡은바에만 집중을 할 수 있다.
서로 분리되어 각자의 역할에 집중할 수 있게끔하여 개발을 하고
그렇게 애플리케이션 만들어 유지보수성, 애플리케이션의 확장성, 그리고 유연성이
증가하고, 중복코딩이라는 문제점이 해결된다.
const express = require("express");
const router = express.Router();
const membershipController = require("../../controllers/membership/membershipController");
const upload = require("../../modules/awsUpload");
router.get("/:gender", membershipController.detailMembership);
router.post("/images", upload.single("img"), membershipController.uploadImage);
router.post("/", membershipController.uploadMembership);
module.exports = router;
라우터의 코드가 훨씬 더 심플해졌다.
const { none } = require("../../modules/awsUpload");
const con = require("../../modules/mysql");
// const upload = require("../../modules/awsUpload");
const membershipController = {
detailMembership: (req, res) => {
const { gender } = req.params;
const sql = "select * from membership where gender=?";
const params = [Number(gender)];
if (Number(gender) === 0 || Number(gender) === 1) {
con.query(sql, params, (err, result) => {
if (err)
return res.status(400).json({
message: "조회 실패",
});
res.status(200).json({
message: "조회 성공",
data: result,
});
});
} else {
res.status(401).json({
// 오류번호는 중첩되면 안됨!
message: "옳지 않은 gender 값 입니다.",
});
}
},
module.exports = membershipController;
membershipController라는 함수에 여러 connection들을 만들어
조회 / 추가 / 삭제 하도록 코드를 만들었다.
이후 Postman 을 통해 통신 실습을 하면 sql 에 데이터가 추가되고 삭제되는 것을 볼 수 있었다.
config 폴더에 awsConfig.json 파일 가져오기! (나의 IAM )
modules 폴더에 기존 awsUpload 파일 가져오기
npm install multer multer-3 aws-sdk
const membershipController = {
uploadImage: (req, res, err) => {
const img = req.file; // req.body가 아니라 req.file로 받아옴
console.log(img);
// postman에서 header값 dataform으로
if (img) {
res.status(200).json({
message: "이미지 업로드 완료",
imgUrl: img.location, // location으로 img의 url 가져오기!
});
} else {
res.status(400).json({
message: "이미지 업로드 실패",
});
}
},
uploadMembership: (req, res) => {
const { gender, title, img } = req.body;
const sql = "insert into membership (gender, title, img) values (?, ?, ?)";
const params = [gender, title, img];
// postman에서 header값 application/json으로
con.query(sql, params, (err, result) => {
if (err)
return res.status(500).json({
message: "에러가 발생했습니다.",
}); // return 으로 err가 걸리면 바로 if문 탈출하므로 else 노필요
res.status(200).json({
message: "생성이 완료되었습니다.",
});
});
},
};
위의 코드로 S3에 이미지 파일 업로드
업로드 된 파일을 MySQL 에 저장 (img 의 URL 형태로)