이번 시간에는 데이터 베이스 모델은 무엇인지 살펴보고 생성해보겠습니다. 모델이라는 것은 내가 생성할 파일의 형태를 정의해줍니다. 형태라는 것은 어떤 내용이 들어가고 그 내용은 어떤 자료형을 갖고 있는지를 의미한다고 할 수 있습니다.
youtube
*|init.js
+|models
+|Video.js
|controllers
*|videoController.js
더 자세하게 type 종류나 정의 방법등을 살펴보려면 링크 클릭
import mongoose from 'mongoose';
const VideoSchema = new mongoose.Schema({
fileUrl: {
type: String,
// 해당 데이터가 없을 때의 에러 메시지
required: 'File URL is required'
},
title: {
type: String,
required: 'Title is required'
},
//description이 꼭 필요한 것은 아니므로 required는 정의하지 않습니다.
//type만 정의할 경우에는 객체로 전달하지 않아도 됩니다.
description: String,
views:{
type: Number,
default: 0
},
createdAt: {
type: Date,
default: Date.now
}
});
const model = mongoose.model('Video', VideoSchema);
export default model;
위에서 만든 모델을 mongoose connection이 알게 하기 위해 init.js에서 import 해줍니다.
import './db';
import './models/Video';
먼저 위에서 만들어준 모델을 import 합니다. Video.find({})
를 하면 데이터베이스에서 모든 Video element를 불러오는데요. 서버에서 불러오기 때문에 언제 올지 모릅니다. async-await가 필요하게 됩니다. try-catch문으로 하는 이유는 try-catch 없이 async-await문에서 오류가 도중에 발생하면 videos에 undefined가 넘겨지고 javascript는 에러 발생 여부와 관계없이 다음 코드를 실행하기 때문에 결국 아예 페이지가 깨져버리게 됩니다.
import Video from '../models/Video';
export const home = async(req, res) => {
try{
const videos = await Video.find({});
res.render("home", {videos});
}catch(err){
console.log(err);
res.render("home", {videos:[]});
}
}