본문 바로가기
프로젝트/로그인, 회원가입

1. user 파일, score 파일 병합

by 갱생angel 2024. 5. 20.

※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