2011-09-29 6 views

risposta

18

Io personalmente uso node-validator per verificare se tutti i campi di input dell'utente sono corretti prima ancora di presentarlo a Mongoose.

Il validatore di nodi è anche utile per creare un elenco di tutti gli errori che possono essere presentati all'utente.

+0

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

+2

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

+5

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

14

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'); 
    } 
... 
}); 
+0

Sì, ma se ti piace PersonSchema = new Schema ({account: AccountSchema}); dove AccountSchema ha la convalida, gli errori non sono gorgogliati. – Chance

+0

funziona così :) – Erhan

+0

Stephen: Credo che la convalida del modello di Backbone possa essere utilizzata sul lato client. Ma può essere un po 'confuso, codice lato client/server misto. [Dailyjs ha scritto a riguardo] (http://dailyjs.com/2011/04/04/node-tutorial-19/) – Erhan

5

Personalmente utilizzare il middleware express-form per eseguire la convalida; ha anche funzionalità di filtro. È basato su validatore di nodi ma ha bonus aggiuntivi per espresso. Aggiunge una proprietà all'oggetto richiesta indicando se è valida e restituisce una matrice di errori.

Vorrei usarlo se stai usando express.

+1

Chaz, hai qualche buon modo per accedere ai dati annidati con i metodi di risanamento in forma espressa? –

Problemi correlati