Arquitectura API inicial. Contiene un conjunto básico e imprescindible de módulos, servicios y configuraciones.
Utilice Express Middlewares para dividir la funcionalidad y tener partes separadas lógicamente. Cada enrutador/punto final puede tener una cadena de middlewares para validar datos, cargar datos de fuentes de datos, mapear datos, verificar permisos y realizar la lógica empresarial principal.
Cada función de Middleware debe tener el mismo nombre en todo el conjunto de cadenas.
Ejemplo: si una nueva solicitud del proceso de creación de usuario pasa por varias funciones de middleware, todas deben tener el mismo nombre ( createOne(req, res, next)
).
* Excepción: middlewares 'auxiliares' no relacionados
Ejemplo:
appRoute.get('/:userId',
authMiddleware.isAuthenticated,
acl.getOne,
validator.getOne,
loader.getOne,
controller.getOne,
);
./app/middlewares/
Encadena elementos para realizar una funcionalidad específica propia.
Comprueba si la solicitud actual puede alcanzar una lógica empresarial. Esta capa puede verificar si un usuario que inició sesión tiene permisos para realizar esta solicitud.
Ejemplo:
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());
},
Asigna datos salientes/entrantes para su posterior procesamiento mediante otra función.
Ejemplo:
updateOne(req, res, next) {
delete req.body.password;
delete req.body.confirm_password;
return next();
},
Valida los datos entrantes de acuerdo con las reglas instaladas para evitar el manejo de datos no válidos.
Ejemplo:
deleteOne(req, res, next) {
req.assert('userId', 'Valid user id should be provided').notEmpty().isMongoId();
mainValidator.handleValidationResult(mainValidator.validateErrorsSync(req), res, next);
},
Cargas/obtenciones requeridas por entidades/objetos de lógica empresarial de fuentes de datos disponibles. El sistema puede recuperar usuarios o entidades relacionadas de una base de datos o procesar datos.
Almacena y pasa entidades cargadas en un objeto especial dentro del objeto req
(solicitud). El servicio Entity Loader debe usarse para enviar todas las entidades y pasarlas dentro del objeto de solicitud.
Ejemplo:
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/
Los servicios realizan una funcionalidad de enfoque único que se invoca dentro de la aplicación para manejar la lógica empresarial.
./commands
Visite https://nodejs.org para obtener detalles de instalación.
Node Package Manager, debería venir incluido con node.
Instale MongoDB https://docs.mongodb.com/manual/installation/
$ git clone <package url> .
$ npm install
config/env/env.local
y copie los datos de config/env/env.local_example
config/env/.env.test
y copie los datos de config/env/.env.test_example
$ npm run start:[environment]
Ejemplo: $ npm run start:local