Schema에 설정된 데이터 값을 기본으로 저장을 한다. 잘못된 정보가 들어가면 document 데이터에서 제외된다. Mongoose가 데이터 타입의 유효성 검사를 도와준다. 예를들어 meta 정보에 string 값이 입력되면 meta 정보는 document object에 포함시키지 않는다. title에 numer가 들어가면 string으로 자동 변환된다. 실수를 방지하기 위해 Schema 설정이 꼭 필요하다.
database에 저장하는 방식은 2가지가 있다. 자바스크립트 오브젝트를 생성하고 save 방법, create 방식으로 저장하는 방법이 있다. create 방식은 자동으로 오브젝트를 생성한다. save 함수는 promise 속성을 갖기때문에 async-await를 적용해야 한다. (데이터베이스가 저장될 동안 자바스크립트가 기다려줘야 하기 때문)


Schema에서 설정된 데이터 값 이외에 다른 종류의 값이 입력되면 결과값을 출력하지 않는다. try-catch으로 에러를 처리해야한다.


createAt은 date 값으로 설정해 둔 상태. 왼쪽은 String으로 입력해서 에러 메세지가 발생하고 결과값을 출력하지 않는다. 반면에 오른쪽은 crateAt 값을 입력하지 않았지만 Schema 설정에서 필수값으로 지정하지 않아 에러가 발생하지 않고 결과값 출력이 가능하다. (try-catch를 사용하지 않은 await에서 에러가 발생하면 멈춰 아무것도 실행되지 않는다.)
try-catch를 사용하여 에러메세지 확인 및 화면 출력

에러가 발생하는 상황을 줄이기 위해 직접 컨트롤러에서 createdAt, views, rating을 작성하는 것 보다 비디오가 생성될 때 mongoose, Schema에서 자동으로 생성되도록 하는 것이 효율적이다. (직접 createdAt: Date.now()를 작성하면 코드가 실행되면서 함수가 자동으로 실행되는데 Schema에서 Date.now를 작성하면 비디오가 생성될 때만 함수가 작동한다.)
Schema 에서 비디오 생성될 때 요구사항 추가 및 자동생성

* default : 초기값
* required : 필수값
* Date.now : 현재시간함수 ()없는 이유는 생성될때만 함수를 작동학 싶어서.. ()있으면 코드 실행시 자동으로 생성
* trim : string 양 옆 빈 공간을 없애준다.
위 사항 이외에 최대 글자수, 최소 글자수 등 세부적으로 설정할 수 있다. 최대, 최소 글자수는 input 태그에서도 설정할 수 있지만 스키마에도 설정하는 것이 보안상 좋다. 예를 누가 들어 해킹해서 input 태그 설정을 없애도 스키마에서 제한 설정은 남아 있기 때문이다. (input, 스키마 둘다 설정하는 것이 좋다!)
Mongoose v7.3.1: SchemaTypes
SchemaTypes handle definition of path defaults, validation, getters, setters, field selection defaults for queries, and other general characteristics for Mongoose document properties. You can think of a Mongoose schema as the configuration object for a Mon
mongoosejs.com

'백엔드 > MongoDB' 카테고리의 다른 글
| DataBase (6) - Middlewares (0) | 2023.07.11 |
|---|---|
| DataBase (5) - Edit Data (0) | 2023.07.10 |
| DataBase (4) - 정규식표현, 16진수(24byte) 문자열 (0) | 2023.07.05 |
| DataBase (2) - callback, promise (0) | 2023.06.30 |
| DataBase (1) - Setting (0) | 2023.06.28 |