Youtube Clone/MongoDB
Upload
Learning-Developer
2019. 9. 19. 20:02
- 웹에 upload 할 때 중요한 개념은, 파일 그 자체를 불러오는 게 아니라, 그 파일의 위치를 가져오는 것.
- 모든 파일을 웹에 저장한다면 웹이 너무 무거워진다.
- 파일은 서버의 DB에 저장하고, 그 위치를 웹이 기억한다.
- 파일을 업로드하면 그 파일의 URL을 추출해서 저장할 수 있는 middleware 필요
- npm install multar
- /upload 화면에서 책을 선택하고, 제목과 설명을 적은 뒤 업로드 버튼을 누르면 책의 정보가 전송된다.(POST)
- bookRouter에서 이 신호를 포착하고 addBook과 postUploadBook을 차례대로 실행한다.
- addBook은 /uploads/books 폴더에 책의 url을 저장한다.
- postUploadBook은 models/Book.js에서 정의한 Book model을 바탕으로 newBook을 하나 만든다.
- DB에 정보가 올라가는건 Book.create() 할 때인듯.
- 그러고 나서 /home으로 접근하면 DB의 파일들을 모두 보여주게 되어 있는 상황.
- DB(/uploads/books)로 접근하면 DB의 파일들을 내어줘야 한다.
- /uploads를 위한 특별한 라우터가 필요하다.
- 디렉토리에서 파일을 꺼내주는 middleware, express.static()을 이용한다.
- app.use("/uploads", express.static("uploads"));
- 이 함수는 controller나 view 없이 파일만 확인한다.
- 그러나 주의해야 할 점은, 내 서버에 파일을 저장하는 것이나 static을 쓰는 것은 좋은 방법이 아니다.
- 만약 코드를 업데이트하고 새로운 서버를 업로드하면 기존 서버의 데이터가 날아간다.
- 또 지역에 따라 서버를 나눴을 때, 모든 서버에 모든 파일을 다 두는건 좋은 생각이 아님.
- 또는 어떤 유저가 엄청 큰 파일을 업로드하면 서버가 막혀버린다.
- 일단 이 방법을 사용해서 연습해보는 것이고, 나중에는 모두 바꿀 것이다.
- DB에 있는 파일을 지우고 싶다면 terminal에 mongo를 치거나 mongo.exe를 켜서 다음과 같이 입력.
- use nineOclock
- show collections
- db.book.remove({})
- exit