2017-12-27 287 views
0

我正在處理一個函數,它將返回一個布爾值。該值表示用戶是否存在於數據庫中。目前我有這個:從NodeJS中的MYSQL返回布爾值

function checkIfExists(){ 
    var sql = "SELECT * FROM Users WHERE user = " + mysql.escape(req.body.username); 
    var rows = 0; 
    database.query(sql, function(err, result, fields){ 
     console.log(result.length); 
     rows += result.length; 
    }); 
    return rows > 0; 
    } 

    console.log(checkIfExists()); 

我使用'console.log(result.length)'來驗證是否有結果。當我測試了一些投入,我得到這個:

false 
1 

這很奇怪,因爲有一個結果,所以行應該等於1,但隨後返回false,而不是真實的。有沒有可能是行的值不會改變中「database.query(...」

+0

.query接受函數作爲其第二個參數,當查詢完成時調用該函數。換句話說,在函數作爲參數傳遞給查詢之前,原始函數可能會返回。 – Riwen

+0

你在返回之前控制行嗎?那是否包含一個? – Deep

+0

如果我在'return rows> 0'之前放置'console.log(rows)',它會給我'1'。但函數返回false – Soccerrlife

回答

0

因爲你的函數checkIfExists是異步的,我想你用前人的精力回調系統是這樣的:

function checkIfExists(callback) { 
    var sql = "SELECT * FROM Users WHERE user = " + mysql.escape(req.body.username); 
    var rows = 0; 
    database.query(sql, function (err, result, fields) { 
     if (err) { 
      callback(err, null); 
     } 
     else { 
      console.log(result.length); 
      rows += result.length; 
      callback(null, rows > 0); 
     } 
    }); 
} 

checkIfExists(function(err, isExists) { 
    if (err) { 
     // An error occured 
    } 
    else { 
     console.log(isExists); 
    } 
}); 

編輯

您也可以simlify您checkIfExists功能是這樣的:

function checkIfExists(callback) { 
    var sql = "SELECT * FROM Users WHERE user = " + mysql.escape(req.body.username); 
    database.query(sql, function (err, result) { 
     callback(err, result ? result.length > 0 : false); 
    }); 
} 

更多的信息在這裏: Understanding Async Programming in Node.js

希望它有幫助。

+0

此代碼還顯示1和false。但接着是相反的。 – Soccerrlife

+0

對不起,請使用回調檢查我的編輯(null,rows> 0); – Sparw

+0

非常感謝。然而,函數應該只是由'checkIfExists()'調用,所以我可以在if語句中使用它:'if(checkIfExists()){.....}' – Soccerrlife