これが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
これを機能させ、匿名関数からも返す方法はありますか?
前もって感謝します。