Express-Validator의 Custom Validator

express-validator는 편리한 기본 validator를 제공합니다. 하지만 실제 애플리케이션에서는 충분하지 않을 수 있습니다. 이 경우, 사용자가 validator를 커스텀하여 작성할 수 있습니다.

Custom Validator

Custom Validator.custom() 체인 메서드를 이용해 구현할 수 있습니다. Custom Validator는 비동기 유효성 검사를 나타내기 위해 Promise를 반환하고 사용자 지정 오류 메세지를 사용하기 위해 어떤 값을 throw하거나 reject할 수 있습니다. 여기서 만약 Custom Validator가 비동기적으로 Promise를 반환한다면 field가 유효하지 않는다는 것을 나타내기 위해 reject해야합니다.

예시

입력된 email 값이 이미 사용중인 email 주소인지 검증합니다. 이 예시에서 이미 사용중인 이메일이 있는 경우, Promisereject합니다.

1
2
3
4
5
6
7
8
9
10
11
const { body } = require('express-validator');

app.post('/user', body('email').custom(value => {
return User.findUserByEmail(value).then(user => {
if (user) {
return Promise.reject('이미 사용중인 이메일 주소입니다.');
}
});
}), (req, res) => {
// 사용자의 요청을 처리합니다.
});

예시2

회원가입중에 비밀번호비밀번호 확인값이 일치하는지 검증합니다. 이 validatorPromisereturn하지 않고 true값을 리턴하여 synchronous (동기)적으로 처리합니다.

1
2
3
4
5
6
7
8
9
10
11
12
const { body } = require('express-validator');

app.post('/user', body('passwordConfirmation').custom((value, { req }) => {
if (value !== req.body.password) {
throw new Error('비밀번호 확인이 일치하지 않습니다.');
}

// 이 동기 custom validator의 성공을 나타냅니다.
return true;
}), (req, res) => {
// 사용자의 요청을 처리합니다.
});

위와 같은 방법으로 이전글에서 소개한 표준 validator 이외에 Custom Validator를 사용하여 사용자의 요청을 안전하게 처리할 수 있습니다.