초기 API 아키텍처. 기본적이고 필수인 모듈, 서비스 및 구성 세트가 포함되어 있습니다.
기능을 분할하고 논리적으로 분리된 부분을 갖기 위해 Express 미들웨어를 사용합니다. 각 라우터/엔드포인트에는 데이터 유효성을 검사하고, 데이터 소스에서 데이터를 로드하고, 데이터를 매핑하고, 권한을 확인하고, 주요 비즈니스 로직을 수행하는 미들웨어 체인이 있을 수 있습니다.
각 미들웨어 기능은 전체 체인 세트를 통해 동일한 이름을 가져야 합니다.
예: 사용자 생성 프로세스의 새로운 요청이 여러 미들웨어 함수를 전달하는 경우 모든 미들웨어 함수는 동일한 이름을 가져야 합니다( createOne(req, res, next)
).
* 예외: 관련 없는 '도우미' 미들웨어
예:
appRoute.get('/:userId',
authMiddleware.isAuthenticated,
acl.getOne,
validator.getOne,
loader.getOne,
controller.getOne,
);
./app/middlewares/
특정 기능을 수행하는 체인 아이템입니다.
현재 요청이 비즈니스 로직에 도달할 수 있는지 확인합니다. 이 계층은 로그인한 사용자에게 이 요청을 수행할 수 있는 권한이 있는지 확인할 수 있습니다.
예:
async getOne(req, res, next) {
if (mainAcl.isAdmin(req.user)) {
return next();
}
const userIdRequested = req.params.userId;
const userIdCurrent = req.user._id.toString();
if (userIdRequested === userIdCurrent) {
return next();
}
return next(new Forbidden());
},
다른 기능에 의한 추가 처리를 위해 발신/수신 데이터를 매핑합니다.
예:
updateOne(req, res, next) {
delete req.body.password;
delete req.body.confirm_password;
return next();
},
잘못된 데이터가 처리되는 것을 방지하기 위해 설치된 규칙에 따라 들어오는 데이터의 유효성을 검사합니다.
예:
deleteOne(req, res, next) {
req.assert('userId', 'Valid user id should be provided').notEmpty().isMongoId();
mainValidator.handleValidationResult(mainValidator.validateErrorsSync(req), res, next);
},
사용 가능한 데이터 소스의 비즈니스 논리 엔터티/객체에 필요한 로드/가져오기입니다. 시스템은 데이터베이스에서 사용자 또는 관련 엔터티를 검색하거나 데이터를 처리할 수 있습니다.
req
(요청) 개체 내부의 특수 개체에 로드된 엔터티를 저장하고 전달합니다. 모든 엔터티를 sed하고 요청 객체 내에서 전달하려면 엔터티 로더 서비스를 사용해야 합니다.
예:
async getOne(req, res, next) {
try {
const userFound = await UserService.findOne({ query: { _id: req.params.userId }, options: { lean: true } });
if (!mainHelper.isObjectValid(userFound)) {
throw new NotFound('user not found');
}
MainLoader.setEntities(req, { user: userFound });
return next();
} catch (err) {
return next(err);
}
},
./app/services/
서비스는 비즈니스 로직을 처리하기 위해 애플리케이션 내에서 호출될 한마음 집중 기능을 수행합니다.
./commands
설치 세부사항을 보려면 https://nodejs.org를 방문하세요.
노드 패키지 관리자는 노드와 함께 번들로 제공되어야 합니다.
MongoDB 설치 https://docs.mongodb.com/manual/installation/
$ git clone <package url> .
$ npm install
실행 config/env/env.local
파일을 생성하고 config/env/env.local_example
에서 데이터를 복사합니다.config/env/.env.test
파일을 생성하고 config/env/.env.test_example
에서 데이터를 복사합니다. $ npm run start:[environment]
예: $ npm run start:local