Arquitetura inicial da API. Contém um conjunto básico e obrigatório de módulos, serviços e configurações.
Use Express Middlewares para dividir a funcionalidade e ter partes separadas logicamente. Cada roteador/endpoint pode ter uma cadeia de middlewares para validar dados, carregar dados de fontes de dados, mapear dados, verificar permissões e executar a lógica de negócio principal.
Cada função de Middleware deve ter o mesmo nome em todo o conjunto da cadeia.
Exemplo: Se uma nova solicitação do processo de criação de usuário passar por múltiplas funções de middleware, todas elas deverão ter o mesmo nome ( createOne(req, res, next)
)
* Exceção: middlewares 'auxiliares' não relacionados
Exemplo:
appRoute.get('/:userId',
authMiddleware.isAuthenticated,
acl.getOne,
validator.getOne,
loader.getOne,
controller.getOne,
);
./app/middlewares/
Encadeie itens para executar funcionalidades específicas.
Verifica se a solicitação atual pode atingir uma lógica de negócios. Esta camada pode verificar se um usuário logado possui permissões para realizar esta solicitação.
Exemplo:
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());
},
Mapeia dados de saída/entrada para processamento adicional por outra função.
Exemplo:
updateOne(req, res, next) {
delete req.body.password;
delete req.body.confirm_password;
return next();
},
Valida os dados recebidos de acordo com as regras instaladas para evitar o tratamento de dados inválidos.
Exemplo:
deleteOne(req, res, next) {
req.assert('userId', 'Valid user id should be provided').notEmpty().isMongoId();
mainValidator.handleValidationResult(mainValidator.validateErrorsSync(req), res, next);
},
Carrega/obtém exigido por entidades/objetos de lógica de negócios a partir de fontes de dados disponíveis. O sistema pode recuperar usuários ou entidades relacionadas de um banco de dados ou processar dados.
Armazena e passa entidades carregadas em um objeto especial dentro do objeto req
(solicitação). O Entity Loader Service deve ser usado para enviar todas as entidades e passar dentro do objeto de solicitação.
Exemplo:
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/
Os serviços executam funcionalidades de foco único a serem invocadas dentro do aplicativo para lidar com a lógica de negócios.
./commands
Visite https://nodejs.org para obter detalhes de instalação.
Node Package Manager, deve vir junto com o node.
Instale o MongoDB https://docs.mongodb.com/manual/installation/
$ git clone <package url> .
$ npm install
config/env/env.local
e copie os dados de config/env/env.local_example
config/env/.env.test
e copie os dados de config/env/.env.test_example
$ npm run start:[environment]
Exemplo: $ npm run start:local