2016-05-24 37 views
1

Ich möchte die Validierung Nachrichten anpassen, dass meine Mongoose-Modelle produzieren.Mongoose Modell Benutzerdefinierte Fehlermeldung für Enums

Ich neige dazu, meine Validierungen (z. B. erforderlich) nicht direkt auf das Schemaobjekt zu setzen, da es keine Freiheit für benutzerdefinierte Fehlermeldungen gibt. z.B.

sourceAccountId: { 
    type: Schema.ObjectId, 
    require: true, 
    ref: 'Account' 
} 

stattdessen mache ich folgendes.

Ich konnte keinen Weg finden, die Standard-Enum-Nachricht zu überschreiben, wenn ein Feld Enum-Einschränkungen hat.

Mein Modell ist unten aufgeführt, wobei die Statusüberprüfungsmeldung für die erforderliche Funktion, aber nicht für die Enumeration funktioniert.

'use strict'; 

var _ = require('lodash'); 

var mongoose = require('mongoose'); 

var Schema = mongoose.Schema; 

var ConnectionRequestSchema = new Schema({ 
    created_at: { type: Date }, 
    updated_at: { type: Date }, 

    sourceAccountId: { 
    type: Schema.ObjectId, 
    ref: 'Account' 
    }, 

    status: { 
    type: String, 
    enum: ['pending', 'accept', 'decline'], 
    trim: true 
    } 
}); 

// ------------------------------------------------------------ 
// Validations 
// ------------------------------------------------------------ 

ConnectionRequestSchema.path('sourceAccountId').required(true, 'Source Account is required.'); 
ConnectionRequestSchema.path('status').required(true, 'Status is required.'); 
//ConnectionRequestSchema.path('status').enum(['pending', 'accept', 'decline'], 'Status is invalid, valid values include [pending, accept, decline]'); 

// ------------------------------------------------------------ 
// Save 
// ------------------------------------------------------------ 

ConnectionRequestSchema.pre('save', function (next) { 
    var now = new Date().getTime(); 

    this.updated_at = now; 
    if (!this.created_at) { 
    this.created_at = now; 
    } 

    next(); 
}); 

module.exports = mongoose.model('ConnectionRequest', ConnectionRequestSchema); 
+0

Ich hätte nicht gedacht, die ENUM eine Validierung war. –

+0

Es wird ein Validierungsfehler ausgegeben, wenn Sie keinen korrekten Enum-Wert angeben –

Antwort

3

Probieren Sie etwas wie es:

var enu = { 
    values: ['pending', 'accept', 'decline'] 
, message: 'Status is required.' 
} 


var ConnectionRequestSchema = new Schema({ 
    ... 

    status: { 
    type: String 
    , enum: enu 
    , trim: true 
    } 
}); 
+0

Danke, das hat den Trick gemacht –

Verwandte Themen