/models/userModel.js
export const createUser = async (newUser) => {
const { userId, email, password, nickname, profileImage } = newUser;
try{
await pool.query(`
INSERT INTO user (user_id, email, password, nickname, profile_image)
VALUES (?, ?, ?, ?, ?)
`,
[userId, email, password, nickname, profileImage]
);
}catch(error){
// 에러 발생
throw error;
}
};
/controllers/usersController.js
export const getUserProfileController = async (req, res) => {
try{
const userId = req.params.userId;
const user = await getUserById(userId);
res.status(200).json({
message: "사용자 정보 조회 성공",
data: {
email: user.email,
nickname: user.nickname,
profileImage: user.profileImage || DefaultProfileImageName
}
});
}catch(error){
// 에러 처리
console.log(error);
res.status(500).json({message: "서버 에러 발생"});
}
};
/utils/customError.js
// CustomError 클래스 정의
export class CustomError extends Error {
constructor(status, message) {
super(message);
this.status = status;
}
}
/middleware/errorMiddleware.js
export const errorHandler = (err, req, res, next) => {
const timestamp = new Date().toISOString();
console.error(
`[${timestamp}] ${req.method} ${req.originalUrl} | status: ${err.statusCode}, message: ${err.message}
${err.stack}`,
);
const status = err.status || 500;
const message = err.message || "서버 에러 발생";
return res.status(status).json({ message,});
};
/models/userModel.js
export const createUser = async (newUser) => {
const { userId, email, password, nickname, profileImage } = newUser;
try{
await pool.query(`
INSERT INTO user (user_id, email, password, nickname, profile_image)
VALUES (?, ?, ?, ?, ?)
`,
[userId, email, password, nickname, profileImage]
);
}catch(error){
// 커스텀 에러 발생
throw new CustomError(500, "사용자 등록 실패");
}
};
/controllers/usersController.js
export const getUserProfileController = async (req, res, next) => { // 인자에 next 추가
try{
const userId = req.params.userId;
const user = await getUserById(userId);
res.status(200).json({
message: "사용자 정보 조회 성공",
data: {
email: user.email,
nickname: user.nickname,
profileImage: user.profileImage || DefaultProfileImageName
}
});
}catch(error){
// 에러 처리 : 에러처리 미들웨어로 넘김
next(error);
}
};
app.js
...
app.use('/api/auth', authRouter);
app.use('/api/posts', postsRouter);
app.use('/api/users', usersRouter);
// 에러처리 미들웨어 추가
app.use(errorHandler);
...