Mongoose Middleware(2)개발/Node.js2024. 11. 4. 19:57
Table of Contents
1. findByIdAndUpdate Middleware 생성
- 현재 findOneAndUpdate를 위한 middleware은 있는데 findByIdAndUpdate를 위한 middleware가 없음
- findByIdAndUpdate는 findOneAndUpdate을 호출하는데 findOneAndUpdate는 save hook을 호출하지 않음
- findOneAndUpdate에서는 업데이트하려는 문서에 접근할 수가 없음
videoSchema.pre("save", async function () {
this.hashtags = this.hashtags[0]
.split(",")
.map((word) => (word.startsWith("#") ? word : `${word}`));
});
- middleware를 보면 this를 통해 업데이트하는 문서에 접근이 가능함
- save에 있을 때만큼 좋지도 않고 손볼 곳이 많음
- 기존의 방법이 나쁘다는건 아니지만 더 나은 방법을 사용해볼 거임
2. hashtag 관리
- 현재 콤마와 #을 관리하는 function을 다 복붙해서 사용하고 있음
- 한가지 방법은 중복되서 사용하는 function을 따로 관리하는 곳을 만드는 것
// Video.js
export const formatHashtags = (hashtags) => hashtags.split(",").map((word) => (word.startsWith("#") ? word : `${word}`));
// videoController.js
import Video, { formatHashtags } from "../models/Video";
export const postUpload = async (req, res) => {
const { title, description, hashtags } = req.body;
try {
await Video.create({
title,
description,
hashtags: formatHashtags(hashtags),
});
return res.redirect("/");
} catch (error) {
return res.render("upload", {
pageTitle: "Upload Video",
errorMessage: error._message,
});
}
};
3. Static
- 우린 지금까지 Video 모델의 function을 많이 사용했음
- 하지만 이번엔 우리가 이런 function들을 직접 만들어서 hashtag 관리에도 사용해볼 예정임
- static을 생성하기 위해 필요한 것은 Schema.static, function, 만들고자 하는 static의 이름
// Video.js
videoSchema.static("formatHashtags", function (hashtags) {
return hashtags.split(",").map((word) => (word.startsWith("#") ? word : `${word}`));
});
// videoController.js
hashtags: Video.formatHashtags(hashtags),
// video.pug
mixin video(videos)
div
h4
a(href=`/videos/${videos.id}`)=videos.title
p=videos.description
each hashtag in videos.hashtags
li=hashtag
small=videos.createdAt
hr
- https://github.com/Daniel-Jeon/wetube-loaded/commit/fe6099fe8d9fef4a5c7dd63e3c1c092f7a90b5a8
'개발 > Node.js' 카테고리의 다른 글
User Model (0) | 2024.11.07 |
---|---|
Delete and Search Video (0) | 2024.11.05 |
Mongoose Middleware(1) (0) | 2024.11.04 |
Edit Video (0) | 2024.11.04 |
More Schema, Router 수정 (0) | 2024.11.04 |