Anfängliche API-Architektur. Enthält einen grundlegenden und unverzichtbaren Satz an Modulen, Diensten und Konfigurationen.
Verwenden Sie Express Middlewares, um die Funktionalität aufzuteilen und logisch getrennte Teile zu haben. Jeder Router/Endpunkt kann über eine Kette von Middlewares verfügen, um Daten zu validieren, Daten aus Datenquellen zu laden, Daten zuzuordnen, Berechtigungen zu prüfen und die Hauptgeschäftslogik auszuführen.
Jede Middleware-Funktion sollte im gesamten Kettensatz denselben Namen haben.
Beispiel: Wenn eine neue Anforderung des Benutzererstellungsprozesses mehrere Middleware-Funktionen durchläuft, sollten alle denselben Namen haben ( createOne(req, res, next)
)
* Ausnahme: nicht verwandte „Helfer“-Middlewares
Beispiel:
appRoute.get('/:userId',
authMiddleware.isAuthenticated,
acl.getOne,
validator.getOne,
loader.getOne,
controller.getOne,
);
./app/middlewares/
Verketten Sie Elemente, um eigene spezifische Funktionen auszuführen.
Prüft, ob die aktuelle Anfrage eine Geschäftslogik erreichen kann. Diese Ebene kann prüfen, ob ein angemeldeter Benutzer über Berechtigungen zum Ausführen dieser Anfrage verfügt.
Beispiel:
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());
},
Ordnet ausgehende/eingehende Daten zur weiteren Verarbeitung durch eine andere Funktion zu.
Beispiel:
updateOne(req, res, next) {
delete req.body.password;
delete req.body.confirm_password;
return next();
},
Validiert eingehende Daten gemäß den installierten Regeln, um die Verarbeitung ungültiger Daten zu verhindern.
Beispiel:
deleteOne(req, res, next) {
req.assert('userId', 'Valid user id should be provided').notEmpty().isMongoId();
mainValidator.handleValidationResult(mainValidator.validateErrorsSync(req), res, next);
},
Lädt/ruft die von der Geschäftslogik benötigten Entitäten/Objekte aus verfügbaren Datenquellen ab. Das System kann Benutzer oder zugehörige Entitäten aus einer Datenbank abrufen oder Daten verarbeiten.
Speichert und übergibt geladene Entitäten in einem speziellen Objekt innerhalb des req
Objekts (Anfrage). Der Entity Loader Service sollte verwendet werden, um alle Entitäten zu sedieren und innerhalb des Anforderungsobjekts zu übergeben.
Beispiel:
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/
Dienste führen zielgerichtete Fokusfunktionen aus, die innerhalb der Anwendung zur Verarbeitung der Geschäftslogik aufgerufen werden.
./commands
Besuchen Sie https://nodejs.org für Installationsdetails.
Der Node Package Manager sollte im Lieferumfang des Node enthalten sein.
Installieren Sie MongoDB https://docs.mongodb.com/manual/installation/
$ git clone <package url> .
$ npm install
config/env/env.local
und kopieren Sie Daten aus config/env/env.local_example
config/env/.env.test
und kopieren Sie Daten aus config/env/.env.test_example
$ npm run start:[environment]
Beispiel: $ npm run start:local