2014-03-13 72 views
0

我非常抱歉發佈這個問題,因爲我確定答案在那裏,但我無法找到我正在尋找的答案。Node.js sync/async回調從數據庫中返回一個值?

問題是,如果您正在向node.js服務器發出HTTP請求 - 您如何保持連接打開以便數據庫可以返回某些內容?

請考慮以下代碼;

app.get("/myRequest", function (req, response) { 
    database.query('SELECT * FROM table', function(err, rows) { 
    // Cannot return rows because the connection will have already been closed 
    response.JSON(rows); // Doh! 
    }); 
}); 

我想我的問題是,我應該通過修改上面的例子可以解決這個,或者通過編輯實際Web服務器的安裝方式?

我正在使用一個簡單的httpserver,也許express.js會解決這個問題?

+0

將響應作爲回調回復到您的查詢 – c0d3junk13

+0

是什麼讓您認爲數據庫連接已關閉? –

回答

1

當您爲節點服務器編寫路由處理程序時,連接在您發送響應之前不會關閉。因此,如果您等待響應,直到數據庫查詢返回後,與客戶端的連接仍將等待您迴應。節點的要點是它可以並行處理多個併發連接,而​​不是串聯。

+0

感謝Daniel,所以也許我只需要將當前範圍傳遞給數據庫查詢,以便我可以在那裏附加響應? –

+0

不,你的代碼應該像你的問題那樣工作... –

+0

正如Anders所說,它應該像發佈一樣工作。只要你創建了你現場傳遞的函數,它將成爲閉包的一部分,並有權訪問響應。另一方面,如果你定義了你在調用.get()之外傳遞的函數,那麼你需要傳遞響應。 –