2013-03-12 37 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

回答