임의의 데이터가 아닌 몽고 db와의 연결
video의 model과 schema를 만든 후 mongodb에 model 이있는 파일도 연결.
comment의 model과 schema를 만든 후 mongodb에 model 이있는 파일도 연결.
+connect mongodb,dotenv,monogdb schema
어떤 유저든 영상을 보고 검색하고, 수정 ,삭제 ,영상 업로드 ,시청이 가능하도록 하기위한 database 작업의 연결 과정이다.video data의 schema를 만든 후 mongodb와 연결 해준다.
mongodb 설치 후 진행하는 과정 입니다.
mongodb 설치 후 $ npm install dotenv
설치 설치하는 이유는 아래 dotenv 내용에서 설명.
mognodb를 db.js파일에 import 하여 연결 한다.
import mongoose from "mongoose";
import dotenv from "dotenv";
dot.config();
mongoose.connect
mongoose.connect(
"mongodb://localhost:27017/wetube",
{
userNewUrlParser: true,
userFindAndMotify: false
} //기본적으로 셋팅 해주는 부분
);
const db = mongoose.connection;
const handleOpen = () =>console.log("✅ Connected to DB")
const handleError = (error) => console.log(`❌ Error on DB Connection:${error}`)
db.once("open",handleOpen);
db.on("error",handleError);
connect 함수 안의 mongoose.connect
는 몽고디비에 연결하는 부분으로. 주소는 로컬 몽고 디비 주소인 localhost:2017017을 사용합니다. "mongodb://localhost:포트번호/database이름"
연결된 db를 변수를 통해서 사용합니다.db.once("open",handelOpen);
db연결을 once 한번 실행했을때 사용자에게 db와 연결 된걸 알려줄 수 있는 함수를 만들어 처리합니다.error가 발생 할때를 대비해서 db.on("error",handelOpen);
error를 받아와서 어떤 error인지 보여주는 함수를 만들어 줍니다.
임의의 데이터 파일이 있던 db.js 에 mogodb와 dotenv를 import 해서 사용 한다.
dotenv 를 설정하는 이유는 위의 코드를 보면 db의 url과 port번호등 보안상의 위험이 있는 정보들이 노출 되어 있습니다. 이러한 정보들을 안전하게 감춰주는 역할을 한다.
$ npm install dotenv
.env
파일을 만든후 .gitignore
에 추가 한다. .env
파일에는 db의 url,port 를 만들어서 넣어준다. //.env
MONGO_URL ="mongodb://localhost:27017/wetube"
PROT = 4000
.env
파일의 정보들은 dotenv.config 함수를 통해서 정보를 다른파일에서 불러와서 사용 할 수 있다. 찾은 모든 variable들은 process.env.key에 저장 된다.url을 사용하는 db.js 와 PORT 번호를 사용하는 init.js 파일을 수정 해준다.import mongoose from "mongoose";
import dotenv from "dotenv";
dotenv.config(); //process.env.key 에 .env 파일들이 저장됨.
mongoose.connect(
//수정된 부분"mongodb://localhost:2707017/wetube"
process.env.MONG_URL,
{
userNewUrlParser: true,
userFindAndMotify: false
}
);
const db = mongoose.connection;
...
import dotenv from "dotenv";
dotenv.config();
//const PORT = 4000;
const PORT = process.env.PORT || 4000;
const handleListening =()=> console.log(`✅ Listening on : http://localhost:${PORT}`);
mongodb의 장점중 한가지는 documnet(JSON file)를 줄여준다.
mongodb에게 잘못된 데이터가 들어가지 않게 우리의 파일은 이렇게 생겼어 라는걸 알려줘야 한다.
"우리의 파일들은 video라는 이름을 갖고 모든 video들은 string type의 title을 가질거야~~~"
라는걸 알려줘야 한다.
몽구스는 사용자가 작성한 스키마를 토대로 data를 넣기전에 먼저 검사 한다.
sql 처음에 할때 데이터들의 테이블을 만들어주는 작업과 비슷한것 같다. create table한 후 각 데이터들의 데이터 타입, 제약조건 들을 설정해 주는 경우와 비슷하다고 생각한다.
이런 data 모델들을 모아서 사용하기 위해서 models 파일을 만들어서 model 들을 사용한다.
models 폴더의 Video.js 에 video 파일들의 정보를 담아준다.
mongoose.model("Video",VideoSchma);
를 통해서 Video
는 fileUrl, title, views, createdAt 을 가진 VideoSchema 를 사용 한다. 만약 title에 string이 아닌값이 들어온다면 에러가 날것 이다. 다른 파일에서 사용이 가능하도록 export 해준다.
ref
https://mongoosejs.com/docs/guide.html
mongoose schema에 관한 정보는 위의 주소로
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: String,
views:{
type:Number,
default:0
},
createdAt:{
type:Date,
default:Date.now
}
});
const model = mongoose.model("Video",VideoSchema);
export default model;
위의 과정 까지 마쳤다면 지금 우리의 database는 연결이 되어있지만 model이 만들어 진 걸 모르는 상태이다. init.js 에 import "./models/Video";
를 추가해줘서 만들어진 걸 알려준다.
//init.js
import "./db";
import app from "./app";
import dotenv from "dotenv";
import "./models/Video";
import"./models/comment";
//db.js
import mongoose from "mongoose";
import dotenv from "dotenv";
dotenv.config(); //process.env.key 에 .env 파일들이 저장됨.
mongoose.connect(
process.env.MONG_URL,
{
userNewUrlParser: true,
userFindAndMotify: false
}
);
const db = mongoose.connection;
const handleOpen = () =>console.log("✅ Connected to DB")
const handleError = (error) => console.log(`❌ Error on DB Connection:${error}`)
db.once("open",handleOpen);
db.on("error",handleError);
//models/Video.js
import mongoose from "mongoose";
const VideoSchema = new mongoose.Schema({
fileUrl: {
type: String,
required: "File URL is required"
},
title: {
type: String,
required: "Tilte is required"
},
description: String,
views: {
type: Number,
default: 0
},
createdAt: {
type: Date,
default: Date.now
},
//comment가 생성되면 comment ID를 video에 array 형태로 넣는다
comments: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Comment"
}
]
});
const model = mongoose.model("Video", VideoSchema);
export default model;
//models/Comment.js
import mongoose from "mongoose";
const CommentSchema = new mongoose.Schema({
text: {
type: String,
required: "Text is required"
},
createdAt: {
type: Date,
default:Date.now
},
})
const model = mongoose.model("Comment",CommentSchema);
export default model;