2016-07-17 5 views
0

Ich verwende yargs, um CLI-Argumente für eine Datenlade-Helferbibliothek zu validieren.yargs .check() Fehlerbehandlung

Ich möchte überprüfen können, dass eine Datei existiert, bevor das Skript ausgeführt wird, was ich mit fs.accessSync(filename, fs.R_OK); mache. Wenn die Datei jedoch nicht vorhanden ist, zeigt das Messaging einfach die .check() - Funktion als den Fehler an, während ich abfangen möchte und feststelle, dass die Datei nicht existiert (mit Leseberechtigungen).

Also, wie sende ich einen Fehler von .check() auf eine falsche Rückkehr präsentiert werden? Hier

ist der Kern meiner yargs:

var path = { 
    name: 'filepath', 
    options: { 
    alias: 'f', 
    describe: 'provide json array file', 
    demand: true, 
    }, 
}; 

function fileExists(filename) { 
    try { 
    fs.accessSync(filename, fs.R_OK); 
    return true; 
    } catch (e) { 
    return false; 
    } 
} 

var argv = require('yargs') 
    .usage('$0 [args]') 
    .option(path.name, path.options) 
    .check(function (argv) { 
    return fileExists(argv.f); 
    }) 
    .strict() 
    .help('help') 
    .argv; 

und der zurückgegebene Fehler, wenn nicht eine lesbare Datei:

Argument check failed: function (argv) { 
    return fileExists(argv.f); 
} 

ich lieber in der Lage sein etwas entlang der Linien angeben, von : Argument check failed: filepath is not a readable file

Antwort

1

So in yargs 5.0.0, wenn Sie einen nicht truthy Wert zurückgeben es gedruckt wird th am gesamten Ausgang.

Argument check failed: function (argv) { 
    return fileExists(argv.f); 
} 

Wenn Sie Wurf stattdessen können Sie die Ausgangsnachricht steuern.

.check(function (argv) { 
    if(fileExists(argv.f)) { 
    return true; 
    } else { 
    throw(new Error('Argument check failed: filepath is not a readable file'); 
    } 
}) 
+0

Großartig - danke! – abenrob