app.post("/register", async (요청, 응답) => {
let 해시 = await bcrypt.hash(요청.body.password, 10);
let result = await db
.collection("user")
.findOne({ username: 요청.body.username });
if (result) {
응답.send("이미 존재하는 id입니다.");
console.log(result);
} else {
await db.collection("user").insertOne({
username: 요청.body.username,
password: 해시,
});
응답.redirect("/login");
}
});
findOne으로 작성한 username과 동일한 username이 db에 있는 경우에는 가입을 시키지 않고, 동일한 username이 없는 경우에는 insertOne을 사용해서 db에 저장해줄 수 있도록 만들어주었다.
우선 회원가입 ejs페이지에 비밀번호 확인을 위한 input태그 하나를 추가

이후 서버파일로 돌아가서 password와 repassword를 비교해보고,
같은 경우에만 db에 저장할 수 있도록 작성
app.post("/register", async (요청, 응답) => {
let 해시 = await bcrypt.hash(요청.body.password, 10);
let result = await db
.collection("user")
.findOne({ username: 요청.body.username });
if (result) {
응답.send("이미 존재하는 id입니다.");
console.log(result);
} else {
if (요청.body.password === 요청.body.repassword) {
await db.collection("user").insertOne({
username: 요청.body.username,
password: 해시,
});
응답.redirect("/login");
} else {
응답.send("비밀번호를 다시 확인해주세요.");
}
}
});
app.post("/write-post", async (req, res) => {
if (req.isAuthenticated()) {
try {
if (req.body.post_title == "" || req.body.post_con == "") {
res.send("빈 칸을 채워주세요.");
} else {
await db.collection("test-post").insertOne({
post_title: req.body.post_title,
post_con: req.body.post_con,
});
res.redirect("/post-list");
}
} catch (e) {
console.log(e);
res.status(500).send("서버 에러(status: 500)");
}
} else res.redirect("/login");
});
isAuthenticated()로 요청했을 때 값이 있는 경우에만 글을 작성 가능하게 만들고, 아닌 경우에는 로그인 페이지로 이동하게 만들어주었다.