상세 컨텐츠

본문 제목

ch6.8~ mongo

노마드/유튜브

by hippo0207 2022. 8. 17. 14:18

본문

  • mongodb사이트통해 다운받거나 
  • chosolatey 통해 받거나

 

  • mongod   /    mongosh 쳐서 나오면 잘된거임
  • show dbs 나와야함
  • mongoose도 다운필요
  • npm install mongoose
  • db.js 생성

mongodb://127.0.0.1:27017

  • 위의 주소 /db명 >> 
import mongoose from "mongoose";

mongoose.connect("mongodb://127.0.0.1:27017/wetube", {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

const db = mongoose.connection;

const handleOpen = () => console.log("✅ Connected to DB ");
const handleError = (error) => console.log("❌ DB Error", error);

db.on("error", handleError);
db.once("open", handleOpen);
[server.js]

import "./db";
import "./models/Video";
  • db.on : 여러변
  • db.once : 한번

2. CRUD intro

  • create, read, update, delete
  • src/models/Video.js 생성
  • 어플의 데이터가 어캐생겼는지(model) mongoose에게 알려줘야함

3. Video Model

  • Video.js 
import mongoose from "mongoose";

const videoSchema = new mongoose.Schema({
  title: String,
  description: String,
  createdAt: { type: Date, required: true, default: Date.now },
  hashtags: [{ type: String }],
  meta: {
    views: Number,
    rating: Number,
  },
});

const Video = mongoose.model("Video", videoSchema);
export default Video;

4. our first query

  • server.js 에 있던 db, Video import >> init.js로 옮기기 >> 여기서 초기화함
  • inti.js 에서 어플작동시킴
  • package.json >> script를 server.js >> init.js로 변경필요
  • server.js >> express된것, server의 configuration관련코드만 처리
  • init.js >> database, models 들 관리

  • videoController >> import Video

 

  • 두가지방식 >> callback함수 or promise
    • callback >> 함수실행후 실행되는 함수 >> 앞에꺼 실행되길 기다려주는거라 보면됨 (리스너함수처럼)
    • promise 
    • A mongoose query can be executed in one of two ways. First, if you pass in a callback function, Mongoose will execute the query asynchronously and pass the results to the callback.
  • Model.find( { search term }, 콜백함수 )
    • search term 비어있으면 전체로 찾음
    • 콜백함수 >> err, docs 라는 signature가짐
    • 콜백사용한 뒤에 아무것도 return안됨 
    • 밑에 코드 실행순서가 Video.find 의 콜백함수가 제일 느림 (render보다 느림)
    • 그래서 콜백함수안에 return넣어야 함
export const home = (req, res) => {
  Video.find({}, (error, videos) => {
    console.log("errors", error);  // errors null      <<      <<
    console.log("videos", videos);  // videos []      <<      <<
  });
  console.log("hello");
  return res.render("home", { pageTitle: "Home", videos: [] });
};
>>>>>>>>>>
hello      <<      << 이게 먼저나옴
errors null
videos []

>>위치 수정

export const home = (req, res) => {
  Video.find({}, (error, videos) => {
    console.log("errors", error);
    console.log("videos", videos);
    console.log("hello");
    return res.render("home", { pageTitle: "Home", videos: [] });
  });
};

5. async await

위처럼 콜백함수로 하려면 함수안에 함수넣어야함 그게싫어

  • promise사용가능 >> async await
export const home = async (req, res) => {
  try {
    const videos = await Video.find({});
    return res.render("home", { pageTitle: "Home", videos });
  } catch(error) {
    return res.render("server-error", {error});
  }
};

 

'노마드 > 유튜브' 카테고리의 다른 글

ch6.19~ edit video & Middlewares  (0) 2022.08.19
ch6.14~ creating video, exception & validation  (0) 2022.08.18
ch6. mongoDB & Mongoose  (0) 2022.08.16
ch5.7~ conditionals, iteration, mixins  (0) 2022.08.16
ch5. Templates  (0) 2022.08.14

관련글 더보기

댓글 영역