Ich verwende diese Bibliothek für die Validierung: https://validatejs.org/#validate-async.Lösen Sie alle asynchronen Versprechen mit validate.js
Ich habe eine ziemlich komplizierte Möglichkeit, verschachtelte Objekte gegen ihr eigenes Schema zu validieren. Siehe den entsprechenden Code unten.
Grundsätzlich wird:
- erstellen für jedes verschachtelte Objekt ein asynchrones Versprechen.
- Rufen Sie dann Promise.all auf, um die Validierungen aufzulösen oder abzulehnen.
Es funktioniert gut, außer ein Problem. Mit der Standard-Verspre- chen-Bibliothek Promise.all
"Failed Fast", also im Catch-Handler, der in späteren Express-Middleware ist, erhält es nur Ergebnisse vom ersten fehlgeschlagenen Versprechen. Aber damit meine Prüfer arbeiten können, muss ich die Ergebnisse aller fehlgeschlagenen Versprechen kombinieren.
Gibt es eine alternative Zusicherungsbibliothek (A + -kompatibel), die ich in den Validator tauschen könnte, damit ich alle Fehler erfassen kann?
ValidationAdapter.prototype.validateCreateCtrl = function(req, res, next){
var obj = {};
var self = this;
this.logger.debug("Validating " + self.config.modelName + " create request");
self.fieldList.forEach(function(fieldName){
obj[fieldName] = req.body[fieldName];
});
self._resolveObjectRefs(obj);
this.logger.debug("Composed request object " + JSON.stringify(obj, null, 2));
var Promises = [];
Promises.push(validate.async(obj, self.constraints));
Object.keys(self.embeddedConstraints).forEach(function (key){
var value = obj[key];
var constraints = self.embeddedConstraints[key];
if (value.constructor === Array){
var i = 0;
value.forEach(function(newVal){
Promises.push(validate.async(newVal, constraints, {path: key + "[" + i + "]."}));
i++;
});
}else{
Promises.push(validate.async(value, constraints, {path: key}))
}
});
// by default it should fall through
Promise.all(Promises).then(function(){
return next();
}).catch(next);
};
ok danke ich es benutzt. –