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() 할 때인듯.

middlewares.js
bookRouter.js
bookController.js

  • 그러고 나서 /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