mongoDB를 사용중이며 유저 스키마는 다음과 같다.
const userSchema = new mongoose.Schema({
email: {type: String, required: true, unique: true},
username: {type: String, required: true, unique: true},
password: {type: String, required: true},
name: {type: String, required: true},
location: String,
});
mongoDB에 저장되어 있는 데이터는 다음과 같다.

이때 아래와 같이 이미 등록되어 있는 이메일과 같은 이메일로 유저를 생성하려고 해 봤다.

그랬더니 발생한 에러는 다음과 같다

스키마 생성 시 email과 username 항목에는 unique 조건을 입력해놨는데 해당 항목에 대해 중복된 데이터를 데이터베이스에 생성하려고하니 에러가 발생하는 것이다.
에러가 발생하기 전에 중복된 데이터가 있는지 확인 후 중복 데이터가 있다면 유저가 다른 데이터를 입력해 가입할 수 있도록 중복된 데이터가 존재함을 알리는 로직이 있어야 한다.
따라서 해당 로직을 유저 컨트롤러에 추가해준다.
원래의 userController.js 코드
export const postJoin = async(req,res) => {
const {name, username, email, password, location} = req.body;
const pageTitle = Join;
return res.render('join', {pageTitle});
}
추가 완료 된 userController.js 코드
export const postJoin = async(req,res) => {
const {name, username, email, password, location} = req.body;
const pageTitle = 'Join';
const exists = await User.exists({$or: [{username}, {email}]});
if (exists) {
return res.render('join', {
pageTitle,
errorMessage: 'This username/email is already taken',
});
}
확인을 위해 같은 email 또는 username으로 join을 시도하니 페이지가 렌더링 되고 에러문구가 출력되었다.


