Mangusta ha middleware di convalida. È possibile definire le funzioni di convalida per gli elementi dello schema singolarmente. Anche gli oggetti nidificati possono essere validati. Inoltre è possibile definire le convalide di asyn. Per maggiori informazioni consulta lo mongoose page.
var mongoose = require('mongoose'),
schema = mongoose.Schema,
accountSchema = new schema({
accountID: { type: Number, validate: [
function(v){
return (v !== null);
}, 'accountID must be entered!'
]}
}),
personSchema = new schema({
name: { type: String, validate: [
function(v){
return v.length < 20;
}, 'name must be max 20 characters!']
},
age: Number,
account: [accountSchema]
}),
connection = mongoose.createConnection('mongodb://127.0.0.1/test');
personModel = connection.model('person', personSchema),
accountModel = connection.model('account', accountSchema);
...
var person = new personModel({
name: req.body.person.name,
age: req.body.person.age,
account: new accountModel({ accountID: req.body.person.account })
});
person.save(function(err){
if(err) {
console.log(err);
req.flash('error', err);
res.render('view');
}
...
});
Non l'avevo visto, grazie. Non mi piace come la validazione sia legata così strettamente alla logica dei percorsi/controller. Sembra che finiresti per ripeterti un bel po '. – Chance
Dove vorresti gestire la convalida? Controller/route è il posto giusto, perché è il "punto di ingresso" dei dati nel tuo sistema. Potresti scaricarlo nel modello, ma il modello è preoccupato per la persistenza/il recupero dei dati. Il controller/percorso è il posto migliore. – jcolebrand
Nella maggior parte dei progetti basati su domini, i modelli riguardano la logica aziendale, l'integrità dei dati e la convalida delle regole, mentre altri (e persino se stessi) sono interessati alla persistenza/recupero dei dati. Mi rendo conto che i modelli gestiscono la parte dei dati, ma ritengo che dovrebbero anche gestire la convalida. In realtà non lo considererei "offloading" per loro. – Chance