Architecture API initiale. Contient un ensemble de modules, de services et de configurations de base et indispensables.
Utilisez des middlewares express afin de diviser les fonctionnalités et de séparer logiquement les parties. Chaque routeur/point de terminaison peut disposer d'une chaîne de middlewares pour valider les données, charger les données à partir de sources de données, cartographier les données, vérifier les autorisations et exécuter la logique métier principale.
Chaque fonction Middleware doit avoir le même nom tout au long de la chaîne.
Exemple : si une nouvelle demande de processus de création d'utilisateur transmet plusieurs fonctions middleware, elles doivent toutes avoir le même nom ( createOne(req, res, next)
)
* Exception : middlewares « auxiliaires » non liés
Exemple:
appRoute.get('/:userId',
authMiddleware.isAuthenticated,
acl.getOne,
validator.getOne,
loader.getOne,
controller.getOne,
);
./app/middlewares/
Chaînez des éléments pour exécuter vos propres fonctionnalités spécifiques.
Vérifie si la requête actuelle peut atteindre une logique métier. Cette couche peut vérifier si un utilisateur connecté dispose des autorisations nécessaires pour effectuer cette requête.
Exemple:
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());
},
Mappe les données sortantes/entrantes pour un traitement ultérieur par une autre fonction.
Exemple:
updateOne(req, res, next) {
delete req.body.password;
delete req.body.confirm_password;
return next();
},
Valide les données entrantes conformément aux règles installées pour empêcher la gestion des données non valides.
Exemple:
deleteOne(req, res, next) {
req.assert('userId', 'Valid user id should be provided').notEmpty().isMongoId();
mainValidator.handleValidationResult(mainValidator.validateErrorsSync(req), res, next);
},
Charge/Obtient requis par les entités/objets de logique métier à partir des sources de données disponibles. Le système peut récupérer des utilisateurs ou des entités associées à partir d'une base de données ou traiter des données.
Stocke et transmet les entités chargées dans un objet spécial à l'intérieur de l'objet req
(request). Le service Entity Loader doit être utilisé pour stocker toutes les entités et les transmettre dans l'objet de requête.
Exemple:
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/
Les services exécutent une fonctionnalité de concentration unique qui doit être invoquée dans l'application pour gérer la logique métier.
./commands
Visitez https://nodejs.org pour les détails d'installation.
Node Package Manager, devrait être fourni avec node.
Installez MongoDB https://docs.mongodb.com/manual/installation/
$ git clone <package url> .
$ npm install
config/env/env.local
et copiez les données depuis config/env/env.local_example
config/env/.env.test
et copiez les données de config/env/.env.test_example
$ npm run start:[environment]
Exemple : $ npm run start:local