이제 실제로 db에 들어갈 영상을 만들어보자.
일단 영상제목 뿐만 아니라, 영상 설명, 해시태그까지 입력할 수 있는 input을 업로드 페이지에 추가한다. 이때 input의 name은 모두 달라야 한다.
extends base.pug
block content
form(method="POST")
input(placeholder="영상 제목" , required,type="text",name="uploadTitle")
input(placeholder="영상 설명" , required,type="text",name="description")
input(placeholder="해시태그, 여러개 작성이 가능해요." , required,type="text",name="hashtags")
input(type="submit", value="업로드하기")
이제 postUpload 함수로 가서 직접 비디오 객체를 만들고 db에 넣어주면 된다. 코드는 다음과 같다.
export const postUpload = async (req, res) => {
//이곳에서 비디오 배열에 추가함
const title = req.body.title;
const description = req.body.description;
const hashtags = req.body.hashtags;
const video = new Video({
title: title,
description: description,
createdAt: Date.now(),
hashtags: hashtags.split(",").map((word) => `#${word}`),
meta: {
views: 0,
rating: 0,
},
});
await video.save();
return res.redirect("/");
}
일단 video 변수에 new를 사용하여 비디오 객체를 만들고 값을 넣어준다. 이때 우리는 이미 스키마를 통해 비디오에 들어가는 변수들의 자료형을 정해두었다. 따라서 몽구스는 우리가 자료형을 잘못넣는다면 알아서 수정해주거나 아예 저장하지 않는다. 예를들어 제목에 숫자를 입력해도 그 숫자를 자동으로 문자열로 바꾸어 저장한다.
객체를 만든후 db에 저장하기 위하여 video.save()를 호출한다. 이는 promise방식을 사용하여 저장될때까지 기다렸다가 마지막 줄 코드를 실행하게 된다.
위와같은 방식과 같은 역할을 하지만 조금더 쉽게 코드를 작성할 수 있다.
export const postUpload = async (req, res) => {
//이곳에서 비디오 배열에 추가함
const title = req.body.title;
const description = req.body.description;
const hashtags = req.body.hashtags;
await Video.create({
title: title,
description: description,
createdAt: Date.now(),
hashtags: hashtags.split(",").map((word) => `#${word}`),
meta: {
views: 0,
rating: 0,
},
});
return res.redirect("/");
}
Video.create()를 사용하여 객체 생성과 동시에 저장까지 해버리는 것이다. 이때도 async, await을 사용한다.
'Youtube Clone Coding' 카테고리의 다른 글
Search 페이지 (0) | 2022.11.11 |
---|---|
영상 수정하기 (0) | 2022.11.09 |
DB 사용하기(callback, promise) (0) | 2022.11.07 |
DB Schema (0) | 2022.11.04 |
Mongo에 연결하기 (0) | 2022.11.04 |