2012-07-04 10 views
10

Chcę utworzyć warstwę modelu z Mangusta dla moich dokumentów użytkownika, który robi:Mongoose ODM zmienić zmienne przed zapisaniem

  1. walidację (unikalna, długość)
  2. canonicalisation (login i e-mail są przekształcane małe, by sprawdzić unikalność)
  3. generacja sól
  4. hasło mieszania
  5. (rejestrowania)

Wszystkie te czynności należy wykonać przed utrwaleniem w bazie danych. Na szczęście mangusta obsługuje sprawdzanie poprawności, wtyczki i oprogramowanie pośrednie.

Złe jest to, że nie mogę znaleźć żadnego dobrego materiału na ten temat. Oficjalne dokumenty na temat mongoosejs.com są za krótkie ...

Czy ktoś ma przykład na temat wstępnych działań z Mongoose (lub kompletną wtyczką, która robi wszystko, jeśli istnieje)?

Pozdrowienia

+0

Myślałem dokumentację mongoosejs.com było całkiem jasne w tej dziedzinie. Czego próbowałeś, nie działa? – JohnnyHK

+0

Sektor walidacji jest jasny, ale nie sposób przygotować obiektu przed jakimś uporaniem. Myślę, że Schema.pre ("save", callback); może to być funkcja, ale brakuje pełnego przykładu i nie wiem, jak uzyskać dostęp do atrybutów obiektu w funkcji pre- –

+0

Uzyskujesz dostęp do atrybutów dokumentu przez "to" w funkcji oprogramowania pośredniego. – JohnnyHK

Odpowiedz

24

w funkcji Schema.pre('save', callback), this jest dokumentem zapisywane i modyfikacje do niego przed wywołaniem next() zmieniać co zapisane.

14

Inną opcją jest użycie Getters. Oto przykład ze strony internetowej:

function toLower (v) { 
    return v.toLowerCase(); 
} 

var UserSchema = new Schema({ 
    email: { type: String, set: toLower } 
}); 

http://mongoosejs.com/docs/getters-setters.html

+0

Warto zauważyć, że jest to jedyna opcja, jeśli wartość, którą przekazujesz, nie jest tego samego typu, który jest zdefiniowany w schemacie dla określonej właściwości . E. g. Masz właściwość 'amount', która jest typu' number', ale wartością, którą przekazujesz do przetwarzania jest 'string'. – Don

8
var db = require('mongoose'); 
var schema = new db.Schema({ 
    foo:  { type: String } 
}); 

schema.pre('save', function(next) { 
    this.foo = 'bar'; 

    next(); 
}); 

db.model('Thing', schema); 
+0

można zauważyć, że pre dla "save" nie uruchamia się po aktualizacji. zamiast tego użyj "aktualizacji" – sasha

Powiązane problemy