2016-12-22 5 views
2

Ich verwende Express-Validator, um Eingabe in meine API zu validieren, aber ich habe einige Probleme, die Übereinstimmungsfunktion zu verstehen. Ich muss im Grunde in der Lage sein herauszufinden, ob eine Zeichenkette mit irgendeinem der Werte in einem Array von akzeptierten Werten übereinstimmt, wie unten gezeigt, aber es scheint nicht zu funktionieren. Irgendwelche Vorschläge?Übereinstimmungszeichenfolge mit Werten aus Array in Express-Validierung

var schema = { 
    "role": { 
    in: 'body', 
    matches: { 
     options: ["administrator", "editor", "contributor", "user"], 
     errorMessage: "Invalid role" 
    } 
    } 
} 

req.check(schema) 

Antwort

2

Die matches.options erstellt eine Regex. Sie können Ihre Regex als erstes Element des Arrays übergeben. Versuchen Sie folgendes:

var schema = { 
    "role": { 
    in: 'body', 
    matches: { 
     options: [/\b(?:administrator|editor|contributor|user)\b/], 
     errorMessage: "Invalid role" 
    } 
    } 
} 
+0

Vielen Dank! Das machte meinen Tag :) –

2

Für mich ist der Ansatz von Herrn mkhanoyan nur knapp sein Ziel beschrieben richtig gearbeitet, in Tests, die ich String-Wert mit zusätzlichen Zeichen übergeben, und es bestanden, so dass falsch war beheviour

ich verwaltete benutzerdefinierte Enum erstellen Validator:

app.use(expressValidator({ 
    customValidators: { 
    enum: (input, options) => options.includes(input) 
    } 
})); 

auch in Controller, ich benutze es wie folgt aus:

req.checkBody('productType').notEmpty().enum(['car', 'tire']); 

Tests sind fehlgeschlagen mit '! Auto', 'Cahsjhacardasdas' und anderen ungültigen Eingaben

Verwandte Themen