[내일배움캠프] 주특기 숙련주차 개인과제 lv2 로그인 회원가입 기능-1-
먼저 회원가입 기능을 구현한다.
회원가입으로 받는 데이터를 저장하기 위해서 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()로 저장한다.