1편에 이어서 진행한다.
제로초님의 인프런 강의를 정리한 글이다.
/routes 경로에 comments.js를 추가한다.
const express = require("express");
const router = express.Router();
module.exports = router;routes에 추가되는 router 파일들은 위의 코드가 기본이다.
여기에 기본적인 / 경로를 처리할 수 있는 뼈대만 만들어두자.
const express = require("express");
const router = express.Router();
router.get("/", (req, res, next) =>{
});
module.exports = router;app.js 파일에도 추가한다.
const indexRouter = require("./routes");
const userRouter = require("./routes/users");
const commentRouter = require("./routes/comments");
const { sequelize } = require("./models");
const app = express();
sequelize.sync();
app.use(morgan("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use("/", indexRouter);
app.use("/user", userRouter);
app.use("/comment", commentRouter);commentRouter를 require로 로드하고 app.use()를 이용하여 router를 middleware로 설정했다.
users router에 get, post routing을 처리할 수 있는 뼈대를 만든다.
const express = require("express");
const router = express.Router();
router.get("/", (req, res, next) => {
});
router.post("/", (req, res, next) => {
});
module.exports = router;comments도 동일하게 처리한다.
const express = require("express");
const router = express.Router();
// GET /comment/xxx
router.get("/:id", (req, res, next) => {
});
module.exports = router;comments에는 url param을 처리할 수 있도록 :id가 추가되어 있다.
comments의 뼈대를 더 추가한다.
const express = require("express");
const router = express.Router();
router.get("/:id", (req, res, next) => {
});
router.patch("/:id", (req, res, next) => {
});
router.delete("/:id", (req, res, next) => {
});
router.post("/", (req, res, next) => {
});
module.exports = router;url이 /comments/all과 /comments/:id가 있다면 all이 :id보다 앞에 위치해야 한다.
const express = require("express");
const router = express.Router();
const { User } = require("../models");
router.get("/", (req, res, next) => {
User.findAll()
.then(users => {
res.json(users);
})
.catch((err) => {
console.error(err);
next(err);
});
});
router.post("/", (req, res, next) => {
User.create({
name: req.body.name,
age: req.body.age,
married: req.body.married
})
.then(result => {
console.log(result);
res.status(201).json(result);
})
.catch((err) => {
console.error(err);
next(err);
})
})
module.exports = router;const express = require("express");
const router = express.Router();
const { User, Comment } = require("../models");
router.get("/:id", (req, res, next) => {
Comment.findAll({
include: {
model: User,
where: { id: req.params.id }
}
})
.then(comments => {
res.status(200).json(comments);
})
.catch(err => {
console.error(err);
next(err);
});
});
module.exports = router;comments router를 하나씩 살펴보자.
commenter의 모든 comment를 select하는 router다.
commenter는 User의 id와 연결되어 있다.
findAll에서 include를 사용하여 조회하면 Comment와 User의 정보가 포함되어 조회된다.
include를 지우고 commenter로 조회하면 Comment의 정보만 조회된다.
const express = require("express");
const router = express.Router();
const { User, Comment } = require("../models");
router.get("/:id", (req, res, next) => {
Comment.findAll({
include: {
model: User,
where: { id: req.params.id }
}
})
.then(comments => {
res.status(200).json(comments);
})
.catch(err => {
console.error(err);
next(err);
});
});
router.post("/", (req, res, next) => {
Comment.create({
commenter: req.body.id,
comment: req.body.comment
})
.then(result => {
res.status(201).json(result);
})
.catch(err => {
console.error(err);
next(err);
});
});POST routing을 추가했다.
PATCH도 추가해보자.
const express = require("express");
const router = express.Router();
const { User, Comment } = require("../models");
router.get("/:id", (req, res, next) => {
Comment.findAll({
include: {
model: User,
where: { id: req.params.id }
}
})
.then(comments => {
res.status(200).json(comments);
})
.catch(err => {
console.error(err);
next(err);
});
});
router.post("/", (req, res, next) => {
Comment.create({
commenter: req.body.id,
comment: req.body.comment
})
.then(result => {
res.status(200).json(result);
})
.catch(err => {
console.error(err);
next(err);
});
});
router.patch("/:id", (req, res, next) => {
Comment.update({
comment: req.body.comment
}, {
where: { id: req.params.id }
})
.then(result => {
res.status(200).json(result);
})
.catch(err => {
console.error(err);
next(err);
});
});update는 인자를 2개 받는다. 하나는 update하고자 하는 데이터이고, 두 번째는 where조건이다.
마지막으로 DELETE를 추가한다.
const express = require("express");
const router = express.Router();
const { User, Comment } = require("../models");
router.get("/:id", (req, res, next) => {
Comment.findAll({
include: {
model: User,
where: { id: req.params.id }
}
})
.then(comments => {
res.status(200).json(comments);
})
.catch(err => {
console.error(err);
next(err);
});
});
router.post("/", (req, res, next) => {
Comment.create({
commenter: req.body.id,
comment: req.body.comment
})
.then(result => {
res.status(201).json(result);
})
.catch(err => {
console.error(err);
next(err);
});
});
router.patch("/:id", (req, res, next) => {
Comment.update({
comment: req.body.comment
}, {
id: req.body.id
})
.then(result => {
res.status(200).json(result);
})
.catch(err => {
console.error(err);
next(err);
});
});
router.delete("/:id", (req, res, next) => {
Comment.destroy({
where: { id: req.param.id }
})
.then(result => {
res.status(200).json(result);
})
.catch(err => {
console.error(err);
next(err);
});
});select, insert, update, delete에 해당하는 sequelize 메서드를 다 사용해봤다.
select - findAll
insert - create
update - update
delete - destory
sequelize를 사용하여 CRUD를 구현해봤다.
foreginKey로 엮인 테이블 구조를 만들 수 있을 것 같다.