1

これがnode.jsおよびnode-mysqlモジュールでこれを行っている私のコードです。

function registerUser(username, password) {
    var state = '';

    if (!username) { //line #4
            state = 'Missing <strong>username</strong>';
            return state;
    }
    if (!password) { //line #8
            state = 'Missing <strong>password</strong>';
            return state;
    }
    function addUser() {
            statement = 'INSERT INTO data (user_name, user_password) VALUES (\'' + username + '\', \'' + password + '\');';
            connection.query(statement, function(err) {
                    if (err) throw err;
                    console.log('User ' + username + ' added to database');
            })
    }

    connection.query('SELECT user_name FROM data WHERE user_name=\'' + username + '\'', function(err, result){
            if (err) throw err;
            if (!result[0]) {
                    addUser();
                    console.log('User ' + username + ' added.');
                    state =  'Success!';
                    return;
            } else {
                    console.log('User ' + username + ' already exists.');
                    state = 'User already exists!';
                    return;
            }
    })
return state; //line #33
}

4 行目と 8 行目の if ステートメントをトリガーするstateと、変数が割り当てられ、意図したとおりに返されます。ただし、無名関数で実行されたコードconnection.queryは割り当てられておらずstate、33 行目の return は何も返していません。

変数スコープに問題があるのか​​ 、それconnection.queryがノンブロッキングであり、無名関数の前に33行目のリターンが実行されているのかはわかりません。

stateこれを機能させ、匿名関数からも返す方法はありますか?

前もって感謝します。

4

1 に答える 1