Skip to content

Commit

Permalink
feat: add routes, userController(create)
Browse files Browse the repository at this point in the history
  • Loading branch information
SJvaca30 committed Oct 25, 2024
1 parent 6928448 commit 23e3937
Show file tree
Hide file tree
Showing 10 changed files with 80 additions and 578 deletions.
19 changes: 11 additions & 8 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,23 @@ const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
const cors = require("cors");
const indexRouter = require("./routes/index");
const app = express();

require("dotenv").config();
app.use(cors());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json()); // req.body를 객체로 인식
require("dotenv").config(); // 환경 변수 로드
app.use(cors()); // 모든 출처에서 오는 요청을 허용
app.use(bodyParser.urlencoded({ extended: false })); // URL 인코딩된 데이터를 파싱
app.use(bodyParser.json()); // req.body를 객체로 인식, 여기서 req.body란 클라이언트에서 보낸 데이터를 의미

const mongoURI = process.env.LOCAL_DB_ADDRESS;
app.use("/api", indexRouter); // /api 경로로 들어오는 요청은 indexRouter에서 처리
const mongoURI = process.env.LOCAL_DB_ADDRESS; // 로컬 데이터베이스 주소

mongoose
.connect(mongoURI, { useNewUrlParser: true })
.then(() => console.log("MongoDB Connected ㅇㅅㅇ"))
.catch((err) => console.log("DB connection fail ㅠㅅㅠ", err));
.connect(mongoURI, { useNewUrlParser: true }) // 몽고DB 연결, Promise를 반환
.then(() => console.log("MongoDB Connected ㅇㅅㅇ")) // 연결 성공 시 로그 출력
.catch((err) => console.log("DB connection fail ㅠㅅㅠ", err)); // 연결 실패 시 로그 출력

app.listen(process.env.PORT || 5000, () => {
// 서버가 실행될 포트번호 및 서버 접속 성공 시 실행할 콜백함수
console.log(`Server is running on port ${process.env.PORT}`);
});
46 changes: 46 additions & 0 deletions controllers/user.controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
const express = require("express");
const bcrypt = require("bcryptjs");
const User = require("../models/User");

const userController = {};

userController.createUser = async (req, res) => {
try {
let { email, password, name, level } = req.body;
const user = await User.findOne({ email });
if (user) {
return res.status(400).json({
status: "fail",
message: "이미 존재하는 이메일입니다.",
});
}

const salt = await bcrypt.genSaltSync(10);
password = await bcrypt.hash(password, salt);

const newUser = new User({
email,
password,
name,
level: level ? level : "customer",
});
await newUser.save();

// 아래처럼 작성하지 않는 이유는 await newUser.save(); 하기 전에 데이터 검증코드를 추가하거나 미들웨어(pre/post hooks)를 더 세밀하게 제어 가능하기 때문이다.
// const newUser = await User.create({
// email,
// password,
// name,
// level: level ? level : "customer",
// });

return res.status(200).json({
status: "success",
message: "계정이 생성되었습니다.",
});
} catch (error) {
res.status(400).json({ status: "fail", message: error.message });
}
};

module.exports = userController;
File renamed without changes.
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion Model/User.js → models/User.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const userSchema = Schema(
name: { type: String, required: true },
email: { type: String, required: true, unique: true },
password: { type: String, required: true },
level: { type: String, default: "customer" }, // 2types: customer, admin
level: { type: String, enum: ["customer", "admin"] },
},
{ timestamps: true }
);
Expand Down
Loading

0 comments on commit 23e3937

Please sign in to comment.