Начальная архитектура 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
(запрос). Службу Entity Loader следует использовать для отправки всех сущностей и передачи в объект запроса.
Пример:
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 для получения подробной информации об установке.
Менеджер пакетов Node должен идти в комплекте с node.
Установите 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