강력하고 유지 관리가 가능한 REST API를 구축하려면 오류 처리, 검증 및 구조를 신중하게 고려해야 합니다. 이 기사에서는 유효성 검사를 위해 TypeScript, Express.js, Joi 및 객체 지향 프로그래밍(OOP) 원칙을 사용하여 REST API에서 사용자 정의 오류 처리 메커니즘을 설정하는 방법을 살펴보겠습니다. 우리는 프로젝트를 다음과 같이 구성할 것입니다:
구조:
---src
-----미들웨어
--------ErrorHanlder.ts
-----모델
--------User.ts
-----저장소
--------UserRepository.ts
-----경로
--------UserRouter.ts
-----컨트롤러
--------UserController.ts
-----서비스
--------UserService.ts
-----검증
--------UserValidation.ts
---app.ts
---서버.ts
mkdir rest-api cd rest-api npm init -y npm install express typescript @types/node @types/express ts-node-dev npx tsc --init
// src/middlewares/ErrorHandler.ts import { Request, Response, NextFunction } from 'express'; class ErrorHandler extends Error { statusCode: number; message: string; constructor(statusCode: number, message: string) { super(); this.statusCode = statusCode; this.message = message; } } const handleError = (err: ErrorHandler, req: Request, res: Response, next: NextFunction) => { const { statusCode, message } = err; res.status(statusCode).json({ status: 'error', statusCode, message, }); }; export { ErrorHandler, handleError };
// src/models/User.ts export interface User { id: number; name: string; email: string; }
// src/repository/UserRepository.ts import { User } from '../models/User'; class UserRepository { private users: User[] = []; findAll(): User[] { return this.users; } findById(id: number): User | undefined { return this.users.find(user => user.id === id); } create(user: User): User { this.users.push(user); return user; } } export default new UserRepository();
// src/services/UserService.ts import UserRepository from '../repository/UserRepository'; import { User } from '../models/User'; import { ErrorHandler } from '../middlewares/ErrorHandler'; class UserService { getAllUsers(): User[] { return UserRepository.findAll(); } getUserById(id: number): User | undefined { const user = UserRepository.findById(id); if (!user) { throw new ErrorHandler(404, 'User not found'); } return user; } createUser(user: User): User { const { error } = userSchema.validate(user); if (error) { throw new ErrorHandler(400, error.details[0].message); } return UserRepository.create(user); } } export default new UserService();
// src/validations/UserValidation.ts import Joi from 'joi'; const userSchema = Joi.object({ id: Joi.number().required(), name: Joi.string().required(), email: Joi.string().email().required(), }); export { userSchema };
// src/controllers/UserController.ts import { Request, Response, NextFunction } from 'express'; import UserService from '../services/UserService'; import { ErrorHandler } from '../middlewares/ErrorHandler'; class UserController { getAllUsers(req: Request, res: Response, next: NextFunction) { try { const users = UserService.getAllUsers(); res.json(users); } catch (error) { next(error); } } getUserById(req: Request, res: Response, next: NextFunction) { try { const user = UserService.getUserById(parseInt(req.params.id)); res.json(user); } catch (error) { next(error); } } createUser(req: Request, res: Response, next: NextFunction) { try { const user = UserService.createUser(req.body); res.status(201).json(user); } catch (error) { next(error); } } } export default new UserController();
// src/routes/UserRouter.ts import { Router } from 'express'; import UserController from '../controllers/UserController'; const router = Router(); router.get('/users', UserController.getAllUsers); router.get('/users/:id', UserController.getUserById); router.post('/users', UserController.createUser); export default router;
// src/app.ts import express from 'express'; import UserRouter from './routes/UserRouter'; import { handleError } from './middlewares/ErrorHandler'; const app = express(); app.use(express.json()); app.use('/api', UserRouter); app.use(handleError); export default app;
// src/server.ts import app from './app'; const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server running on port ${PORT}`); });
TypeScript, Express.js, Joi 및 OOP 원칙을 사용하여 프로젝트를 구성함으로써 깔끔하고 유지 관리가 가능한 코드베이스를 달성합니다. 사용자 정의 오류 처리 미들웨어는 애플리케이션 전체에서 오류를 관리하는 일관된 방법을 제공하는 동시에 유효성 검사 논리는 데이터 무결성을 보장합니다. 이 설정은 보다 복잡한 애플리케이션을 위한 견고한 기반 역할을 할 수 있습니다.
연락처
이메일: luizcalaca@gmail.com
인스타그램: https://www.instagram.com/luizcalaca
링크드인: https://www.linkedin.com/in/luizcalaca/
트위터: https://twitter.com/luizcalaca
위 내용은 TypeScript, Express.js, Joi 유효성 검사 및 객체 지향 프로그래밍을 사용하는 REST API의 사용자 정의 오류 처리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!