2013-03-12 42 views
0

我有一個基本的類似Twitter的應用程序,可以在一個用戶在線時正常工作。但是,當多個用戶聯機並嘗試執行SQL查詢時,服務器會崩潰。Node.js - 併發SQL查詢崩潰服務器

這是因爲函數爲第一個用戶關閉了數據庫,而第二個用戶仍然是中間函數,則第二個用戶試圖關閉已關閉的數據庫,導致崩潰。

這是一個基本功能爲例:

function showAllUsers(req, res){ 
    dbConnect(); 
    var query = 'SELECT * FROM USERS'; 
    connection.query(query, function (err,rows,fields){ 
    if (err) { 
     throw err; 
    } 
    dbClose(req,res); 
    console.log(rows); 
    res.render('allUsers', { user: req.user, message: req.flash('info'), users: rows }) 
    }) 
} 

我使用的是來自NPM mysql的包,但我假設我沒有正確地使用它。我目前在每次查詢之前打開數據庫,並在之後立即關閉數據庫。

有沒有更安全的方法來做到這一點,或者我可以把它打開直到服務器退出?

+2

你看過[連接池](https://github.com/felixge/node-mysql#pooling-connections)嗎? – robertklep 2013-03-12 11:58:38

+0

您的代碼無法正常工作,因此您不會感到意外。你不能像這樣分享連接,試試這很愚蠢。 它是「崩潰服務器」意味着代碼中存在錯誤 - 即使它是一個愚蠢的用例,node.js不應該通過崩潰來響應。獲取核心轉儲和回溯並將其記錄爲缺陷。 – symcbean 2013-03-12 13:04:35

回答