Se non si specificano regole di validazione coerenti si rischia di avere un database MongoDB assolutamente inaffidabile.
Consideriamo il seguente schema:
{
name: String,
items: Array
}
items è un array di oggetti. Nelle nostre migliori intenzioni ciascun oggetto dovrebbe essere strutturato come segue:
{
title: 'Test',
value: 5
}
Ma in una route delle nostre API otteniamo un errore 500:
app.get('/api/documents/titles', function(req, res) {
Docs.find().sort({name: 1}).then(function(results) {
let titles = [];
results.forEach(function(result) {
let items = result.items;
items.forEach(function(item) {
titles.push(item.title.toLowerCase()); // Errore 500
});
});
res.json(titles);
}).catch(function(err) {
res.json(err);
});
});
L'esempio, volutamente ridondante, ci mostra come in realtà si presenta il nostro array di oggetti:
[
{
title: 'Test',
value: 5
},
{
title: null,
value: 8
}
]
Quindi abbiamo invocato il metodo .toLowerCase()
sul valore null
, da cui l'errore. La soluzione è semplice:
{
name: String,
items: [
{
title: String,
value: Number
}
]
}
In questo modo i dati non potranno essere salvati se non corrispondono ai criteri specificati.