2022. 10. 27. 23:38ㆍ공부/Javascript
우리는 다음처럼 스키마를 작성했었다.
위의 스키마대로 비디오를 만들어서 넣어주기 위해 upload.pug를 수정하자.
name 이 객체의 키값이 되므로 반드시 스키마와 동일한 이름으로 넣어주도록 하자.
이후 videoController.js에서 다음처럼 작성해주면 된다.
해쉬태그는 ,로 구분되므로 split()을 이용해 갈라주었으며, #을 자동으로 붙여주기 위해 map함수를 이용했다.
이렇게 하면 해쉬태그에 입력한 문자열을 ,로 구분하여 배열로 생성해준다.
new를 사용하면 생성자 이름이 와야하므로 반드시 앞글자를 대문자로 사용해야 한다.
그러기 위해서는 스키마 파일을 import할 때 첫글자를 대문자로 받아와야 한다.
video객체의 .save() 메소드를 실행하면 Mongo DB에 해당 객체를 저장하게 되고, 저장한 데이터를 다시 불러와 반환한다.
이렇게 입력하게 되면 다음처럼 데이터가 추가된다.
shell에서 확인해보면 다음처럼 데이터베이스에 추가된 것을 볼 수 있다.
유효성 검사 및 Required(Validator)
Mongoose는 우리가 만든 스키마에 대해 자동으로 유효성 검사를 실시한다.
예를 들어, title이 String인데 여기에 Number 형을 넣는다면 자동적으로 String형으로 바꾸어준다.
만약 Number형으로 지정한 부분에 String형이 온다면 다음처럼 에러를 발생한다.
이처럼 우리가 스키마를 만든 이유는 유효성검사를 자동으로 mongoose가 진행해주기 때문이다.
그런데 여기서 하나 주의할 점은, 입력한 데이터를 검증하기는 하는데, 데이터가 아예 입력되지 않는 경우에는 에러가 나지 않는다는 점이다.
이를 해결하는 방법은 두가지가 있는데 하나는 required 속성을 부여하는 것이고, 다른하나는 default 값을 부여하는 것이다.
위처럼 required를 true로 놓거나 default를 입력해서 자동으로 입력되게 설정하면 된다.
이렇게 설정하면 videoController.js에서 굳이 views나 rating의 정보까지 입력해줄 필요 없이 간소화할 수 있다.
Validator
위의 required와 마찬가지로 스키마의 각 type은 Validator를 가질 수 있다.
Mongoose v6.7.0: Validation (mongoosejs.com)
Mongoose v6.7.0: Validation
Before we get into the specifics of validation syntax, please keep the following rules in mind: Validation is defined in the SchemaType Validation is middleware. Mongoose registers validation as a pre('save') hook on every schema by default. You can disabl
mongoosejs.com
Validation은 일종의 미들웨어로 작용하며, 스키마가 저장되기 전에 실행된다.
모든 스키마 타입은 required 라는 validator를 가지고있으며 이를 true로 설정하면 checkRequired() 함수를 실행한다.
Numbers 타입은 min, max 를 가지며
Strings는 enum, match, minLength, maxLength 를 가진다.
여기서 minLength와 maxLength를 이용해 보안을 설정할 수 있다.
먼저 입력 form에서 title은 최대 80자, description은 최소 20자로 다음처럼 설정한다.
이후 schema에서 title과 description에서 동일하게 maxLength와 minLength를 설정해주면 된다.
이렇게 해주는 까닭은 이용자가 html을 변조하면 엄청나게 긴 문자열을 입력할 수 있는데,
이를 이용하여 서버를 공격하는데 사용할 수 있기 때문에 이를 방지하기 위해서 DB와 HTML에 모두 보안설정을 해주는 것이다.
mongo DB에 저장
만든 객체를 저장할 때 좀 전에는 객체.save() 메소드를 이용했다.
하지만 굳이 객체변수를 따로 만들 필요 없이 바로 저장할 수 있는 기능을 제공하는데 바로 create() 메소드이다.
create도 데이터베이스와 소통하는 것이므로 try-catch 문을 이용해 에러 제어를 해줄 수 있다.
보통은 error 객체에 있는 _message 프로퍼티를 사용하는 듯.
'공부 > Javascript' 카테고리의 다른 글
[Youtube 클론코딩] 데이터베이스의 데이터 업데이트, 스키마 미들웨어, 스키마 스태틱 (0) | 2022.10.29 |
---|---|
[Youtube 클론코딩] mongoose objectID, page not found (0) | 2022.10.29 |
[Youtube 클론코딩] DB 데이터 불러오기와 비동기 (0) | 2022.10.27 |
[Youtube 클론코딩] 비디오 스키마 만들기 (1) | 2022.10.14 |
[Youtube 클론코딩] Mongo DB (0) | 2022.10.14 |