※user 관련 파일과 score 관련 파일을 하나로 병합
-백엔드-
model - <userModel.js> : user model과 score model을 하나로 병합
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const UserSchema = new Schema({
username: {
type: String,
require: true,
unique: true,
},
password: {
type: String,
require: true,
},
imageScore: {
type: Number,
default: 0,
},
combineScore: {
type: Number,
default: 0,
},
});
module.exports = mongoose.model("User", UserSchema);
controller - <userController.js> : user controller과 score controller을 하나로 병합
const asynchHandler = require("express-async-handler");
const User = require("../model/userModel");
const bcrypt = require("bcrypt");
require("dotenv").config();
const jwt = require("jsonwebtoken");
const jwtSecret = process.env.JWT_SECRET;
//Post Login User, /login
const loginUser = asynchHandler(async (req, res) => {
const { username, password } = req.body;
const user = await User.findOne({ username });
if (!user) {
return res.status(401).json({ message: "일치하는 사용자가 없습니다." });
}
const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) {
return res.status(401).json({ message: "비밀번호가 일치하지 않습니다." });
}
const token = jwt.sign({ id: user._id }, jwtSecret);
res.cookie("token", token, { httpOnly: true });
res.status(200).json({ message: "로그인 성공", token });
});
//Post Register User, /register
const registerUser = asynchHandler(async (req, res) => {
const { username, password, chackPassword } = req.body;
const existingUser = await User.findOne({ username });
if (existingUser) {
return res.status(400).json({ message: "이미 사용 중인 아이디입니다." });
}
if (password === chackPassword) {
const hashedPassword = await bcrypt.hash(password, 10);
const user = await User.create({ username, password: hashedPassword });
res.status(201).json({ message: "회원가입 성공" });
}
if (password !== chackPassword) {
return res.status(401).json({ message: "비밀번호가 일치하지 않습니다." });
}
});
//Post ImageGame Score Add, /imageScore
const addImageScore = asynchHandler(async (req, res) => {
const { imageScore } = req.body;
const user = await User.findById(req.user._id);
user.imageScore += parseInt(imageScore);
await user.save();
});
//Post CombineGame Score Add, /CombineScore
const addCombineScore = asynchHandler(async (req, res) => {
const { combineScore } = req.body;
const user = await User.findById(req.user._id);
user.combineScore += parseInt(combineScore);
await user.save();
});
//Get User Data, /login
const getUserData = asynchHandler(async (req, res) => {
const user = await User.findById(req.user._id);
if (user) {
res.status(200).send(user);
} else {
res.status(404);
}
});
module.exports = {
loginUser,
registerUser,
addImageScore,
addCombineScore,
getUserData,
};
route - <userRoute.js> : user route과 score route을 하나로 병합
const express = require("express");
const router = express.Router();
const {
loginUser,
registerUser,
addImageScore,
addCombineScore,
getUserData,
} = require("../controller/userController");
router.route("/login").get(getUserData).post(loginUser);
router.route("/register").post(registerUser);
router.route("/imageScore").post(addImageScore);
router.route("/combineScore").post(addCombineScore);
module.exports = router;
<app.js> : score route 라우트 삭제
const express = require("express");
const cors = require("cors");
const dbConnect = require("./config/dbConnect");
const app = express();
dbConnect();
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use("/file", express.static("file"));
app.use("/", require("./route/userRoute"));
app.use("/", require("./route/postRoute"));
app.use("/", require("./route/gameRoute"));
app.listen(5000, () => {
console.log("5000 포트에서 서버 실행 중");
});
'프로젝트 > 로그인, 회원가입' 카테고리의 다른 글
6. 비밀번호 변경 (0) | 2024.05.27 |
---|---|
5. nodemailer, 인증코드 (0) | 2024.05.27 |
4. 아이디 찾기 (0) | 2024.05.24 |
3. 이메일, 정규 표현식 (0) | 2024.05.23 |
2. JWT 토큰 검증 (0) | 2024.05.20 |