2012-08-03 155 views
3

我使用的是建立在einaros/ws節點WS服務器。 該服務器必須向數據庫發送查詢。爲此,我使用felixge/node-mysql節點的MySQL connection.query()返回undefined

當用戶連接到服務器時,它應該如果客戶端在數據庫中仍存在進行檢查。

這裏是代碼的有趣部分:

console.log("client-liste ist leer"); 
var query = "SELECT name FROM spieler WHERE name='"+id+"' AND passwort='"+passwort+"'"; 
var result = queryToDatabase(query); 
console.log(getTime() + "DB-Result Abfrage: " + result); 

和代碼在查詢完成:

var mysql = require('mysql'); 
var mysqlConnection = mysql.createConnection({ 
    host: dbHost, 
    user: dbUser, 
    password: dbPassword, 
}); 

function queryToDatabase(anfrage) { 
    mysqlConnection.connect(); 

mysqlConnection.query("USE " + db, function(err, rows, fields) { 
    if (err) throw err; 
}); 

mysqlConnection.query(anfrage, function(err, rows, fields) { 
     if (err) throw err; 
     console.log("rows as String - " + JSON.stringify(rows)); 
     return rows; 

    }); 

    mysqlConnection.end(); 
} 

在控制檯中的日誌是:

客戶清單當然IST閱讀
2012年8月3日 - 15:29:0 - DB-結果Abfrage:未定義
行作爲字符串 - [{「な我 「:」 盧卡斯「}]



有誰明白,爲什麼函數返回undefined? 我也試着等待Database-Connection完成一個簡單的setTimout,但沒有任何改變!

回答

4

無法從像被query使用的一個異步回調返回值。您需要重寫queryToDatabase,以便將回調作爲其第二個參數,並在查詢成功時使用rows進行調用。然後,你的主代碼需要看起來像:

queryToDatabase(query, function(result) { 
    console.log(getTime() + "DB-Result Abfrage: " + result); 
    }); 

在現實中,你的所有代碼,取決於查詢結果將需要進入該回調。

在實踐中,你想要的回調需要兩個參數:一個錯誤狀態結果,與錯誤狀態是null如果查詢成功。