0

プログラムは 2 つの変数を取得する必要があります。たとえば、ログインとパスワードである必要があります。スクリプトはコマンドラインから受け取ることができます (ログインまたはパスワードによるログイン)。コマンド ライン引数が 1 つも入力されていない場合、ユーザーはそれを stdin で入力する必要があります。ユーザーが 1 つの引数のみを入力した場合 - ユーザーに 2 番目の引数を求める必要があります。ユーザーが両方の引数を入力した場合 - 何もする必要はありません (exec some func)。

問題は、node.js (非同期) でプログラムを正しくビルドする方法です。

いくつかのイベントで?

このコードを書きましたが、これを改善するにはどうすればよいですか?

if(process.getuid() != 0) {
    console.log('Error!');
    console.log('Required root privileges');
    process.exit(1);
}

var getUser = function(user, callback) {
    if( user == undefined ) {
        ask('Enter user', /.+/, function(user) {
            callback(user, process.argv[3]);
        });
    } else {
        callback(user, process.argv[3]);
    }
}

var getPassword = function(user, password) {
    if( password == undefined ) {
        ask('Enter password', /.+/, function(password) {
            addUser(user, password);
        });
    } else {
        addUser(user, password);
    }
}

function addUser(user, password) {
    console.log('Adding user:');
    console.log(user);
    console.log(password);

    process.exit(0);
}

var user = getUser(process.argv[2], getPassword);

function ask(question, format, callback) {
    var stdin = process.stdin, stdout = process.stdout;

    stdin.resume();
    stdout.write(question + ": ");

    stdin.once('data', function(data) {
        data = data.toString().trim();

        if (format.test(data)) {
            callback(data);
        } else {
            stdout.write("It should match: "+ format +"\n");
            ask(question, format, callback);
        }
    });
}
4

0 に答える 0