2015-05-14 61 views
2

我似乎無法弄清楚如何獲得NodeJS MySQL池查詢以外的結果。這裏是一些示例代碼,以更好地解釋我的意思。NodeJS MySQL如何獲得查詢功能以外的結果

var result = 'Hello world!'; 

var mysql = require('mysql'); 
var pool = mysql.createPool({ 
    connectionLimit : 100, 
    host   : process.env.DB_HOST, 
    user   : process.env.DB_USERNAME, 
    password  : process.env.DB_PASSWORD, 
    database  : process.env.DB_DATABASE 
}); 

pool.query('SELECT * from user LIMIT 10', function (err, rows) { 
    result = rows; 
}); 

res.send(result); 

以上將返回'Hello world!'而不是查詢。

如果我console.log(result)在pool.query函數內,它將返回查詢中的行,但我似乎無法獲取函數外部的數據。我記錄了這個函數,並檢查了所有相關的函數,我想我只是缺少一些基本的東西。

+0

可能重複的[爲什麼我的變量在函數內部修改後沒有改變? - 異步代碼引用](http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) –

+1

你有沒有數字如何做到這一點?似乎這裏的每個人都是間接地回答了這個問題。這些鏈接發佈在答案和上面的評論 - 老實說,儘管需要知道,TMI - 至少現在是因爲我們不能立即直接體驗工作解決方案。我希望至少會有一個示例代碼,以及所有必需的元素來親眼目睹這個解決方案是否工作與否。 – jagc

回答

1

在查詢結束前(並且調用回調函數),您正在將結果發送回去。在您的回調中發送結果將解決問題:

pool.query('SELECT * from user LIMIT 10', function (err, rows) { 
    result = rows; 
    res.send(result); 
}); 

正如Aaron指出的,這是一個常見問題。可以找到更詳盡的答案here

0

池查詢功能是異步的。這意味着你的代碼不會按照你聲明的語句的順序執行。

您啓動一個查詢並指定一個回調函數,該查詢異步操作完成後應該運行該函數。

res.send將在查詢和回調聲明之後立即運行,並且回調將在稍後運行。當你設置結果時,你已經發送了它。

嘗試在回調中移動res.send。

pool.query('SELECT * from user LIMIT 10', function (err, rows) { 
    res.send(rows); 
});