Seongwon Lim

[node.js] Sequelize 이메일 중복 체크 구현하기 본문

Node.js

[node.js] Sequelize 이메일 중복 체크 구현하기

limsw 2022. 5. 11. 00:01
반응형

들어가기

[node.js] Sequelize를 이용하여 Mysql Create 구현하기

 

위의 포스팅 글에서 Sequelize를 이용하여 데이터베이스에 데이터를 추가하는 예제를 살펴보았다. 이 때에는 이메일 중복체크 기능이 없었기 때문에 똑같은 이메일 문자열로 요청했을 경우 데이터가 추가된다. 하지만, 실제로 회원가입 서비스를 구현할 때에는 사용자 정보가 다른 사용자의 정보와 중복되지 않도록 해야한다.

 

따라서 이번 포스팅 글에서는 위에서 구현한 회원가입 서비스에 이메일 중복체크기능을 추가하여 동일한 데이터가 저장되지 않도록 하는 예제를 살펴보고자 한다.

수정 전 코드

// POST를 통해서 테이블에 접근 후 데이터를 생성
router.post('/', (req, res, next) => {
    
    models.Users.create({
        email: req.body.email, // 사용자로부터 입력 받은 email
        name: req.body.name, // 사용자로부터 입력 받은 name
    })
    .then((result) => { // 회원 가입 성공 시
      	res.send(result);
    })
    .catch((err) => { // 회원 가입 실패 시
	res.send(err);
    });
    
});

위 코드는 수정하기 전 코드로 입력받은 데이터의 중복 체크를 하는 부분이 없다. 중복 체크 기능을 구현하기 위해서 필자는 findOne() 메소드를 이용했다.

 

구현 방법은 다음과 같다.

중복체크 적용 코드

 models.Users.findOne({where : {email: req.body.email}})
    .then((data) => {
        if(data) { // 반환 데이터가 있다면 이미 존재하는 이메일
            res.status(400).json({
                result: false,
                message: "이미 존재하는 이메일입니다."
            });
        }
        else {
            models.Users.create({
                email: req.body.email,
                name: req.body.name,
            })
            .then((result) => {
                res.status(200).json(result);
            })
            .catch((err) => {
                res.send(err);
            });
        }      
    });
  • findOne() 메소드를 이용하여 사용자로부터 요청받은 이메일 값이 Users 테이블에 존재하는지 찾는다.
  • 반환된 데이터가 있다면 해당 이메일이 이미 존재한다는 의미이므로 에러 메세지를 리턴한다.
  • 반환된 데이터가 없다면 중복된 이메일이 없다는 의미이므로 테이블에 데이터를 추가한다.

실행 결과


먼저 Users 테이블에 있는 데이터는 위와 같다. 이제 포스트맨을 통해서 이메일 중복 체크가 정상적으로 작동하는지 체크한다.


localhost:3000/register 경로로 POST 요청을 위와 같이 보냈을 때 에러 메세지가 반환된 것을 확인할 수 있다. 테이블에 이미 blue@test.com 이라는 데이터가 존재하기 때문이다.

 

이메일 값을 red@test.com 으로 바꿔서 보내보면


입력한 데이터가 데이터베이스에 정상적으로 저장되는 것을 확인할 수 있다.

Comments