개인과제(로그인,회원가입 및 Mysql)

[내일배움캠프] 주특기 숙련주차 개인과제 lv2 로그인 회원가입 기능-1-

김민커 2023. 6. 27. 09:36

먼저 회원가입 기능을 구현한다.

 

회원가입으로 받는 데이터를 저장하기 위해서 routes폴더에 js파일을 생성한다.

./routes/users.js 

users.js는 회원가입 기능을 구현하기 위한 js파일이다.

그리고 Post로 받은 데이터를 저장하기 위한 뼈대를 구축하기 위해서 schmas폴더에 js파일을 만든다.

./schemas/user.js

저장할 데이터는 아이디, 비밀번호, 닉네임 이 세가지다.

 

    Id: {
        type: String,
        required: true,
        unique: true,
        minlength: 3,
    },
    nickname: {
        type: String,
        required: true,
        unique: true,
        minlength: 3,
    },
    password: {
        type: String,
        required: true,
        minlength: 4,
    },

schmas에 받을 데이터의 양식을 정하고 mongodb에 생성되는 고유한 오브젝트 id인 _id를 사용하기 위해서 

UserSchema.virtual('userId').get(function(){
    return this._id.toHexString();
});

UserSchema.set('toJSON',{
    virtuals:true,//JSON형태로  userId를 출력한다.
});

toHexString()으로 _id를 userId로 바꾸고 .set으로 JSON형태로 바꾼뒤 

module.exports=mongoose.model("User",UserSchema)로 내보낸다.

 

schmas로 저장 양식을 설정했으니 아까 만든 users.js에서 회원가입 기능의 코드를 작성한다.

 

먼저 최상단에 express와 router, 그리고 schmas의 user.js 와 연결한다.

const express = require("express");
const router = express.Router();
const User = require("../schemas/user");

회원가입은 post로 데이터를 보내고 저장하는 것이다.

router.post("/signup", async (req, res) => {
    const { Id, nickname, password, confirmPassword } = req.body

post로 요청할 때 body에서 받을 데이터를 설정한다.

 

그리고 body 데이터의 양식이 맞는지 설정하고자한 비밀번호가 confirmPassword와 맞는지 if문을 써서 확인한다.

 

또한 Id와 nickname이 중복되는지 아닌지 확인한다.

 const existsUsers = await User.findOne({
        $or: [{ Id }, { nickname }],
    });
    if (existsUsers) {
        // NOTE: 보안을 위해 인증 메세지는 자세히 설명하지 않습니다.
        res.status(400).json({
            errorMessage: "이메일 또는 닉네임이 이미 사용중입니다.",
        });
        return;
    }

findOne을 사용해서 mongodb의 User테이블을 확인한다.

모든 확인 절차를 통과하면

const user = new User({ Id, nickname, password });
    await user.save();

    res.status(201).json({Message: "회원가입에 성공했습니다."});
});

 

users에 새로 받은 데이터를 할당하고

save()로 저장한다.