如何结束一个MySQL连接,而不是让它挂在NodeJS?

我想在我的节点程序中结束我的MySQL连接。 我可以成功地使用connection.end()这样的东西。 但是,当我这样做,似乎并没有运行之前的查询。 如果我看到运行之前,我的插入查询离开结束语句,然而程序然后挂起,它永远不会结束。

这是我的代码

var mysql = require('mysql'); var connection = mysql.createConnection({'...'}); connection.connect(function(err){ }); for(var a=0; a<ticker.length;a++){ if(result[i].tweetText.indexOf(ticker[a]) > -1){ for(var j=0; j<positive.length;j++){ if((result[i].tweetText.indexOf(positive[j]) > -1) && check > -1){ console.log(result[i].tweetText + "\n") plus++; console.log(ticker[a] + "plus"+plus +"\n") check = -1; connection.query("insert into....", function(err, result) { }); } } } } connection.end(); 

结束成功终止连接,但所有我的插入语句不运行; 当我删除结束连接语句,我的插入语句运行,但程序挂起。

你可以做我所做的,并使用一个MySQL pool 。 将你的连接设置存储在一个对象中,使用你的configurationvariables创build池,然后在你想要的地方绕过con ,然后抓住连接,查询你的db,并且为你处理所有事情。 没有挂断。

 var db_config = { user:"", password:"", database:"", port:80 }; var con = mysql.createPool(db_config); 

然后使用getConnection函数打开并释放连接。

 con.getConnection(function(err){ con.query("SELECT * FROM tableName",function(err,result) { }); }); 

你可以阅读更多关于pool连接通过github mysql源码

根据文档当你使用conn.query时,连接会自动打开,所以你不需要

 connection.connect(function(err){ }); 

回答你的问题,问题是因为当你插入到数据库,节点不会等待,并继续循环。 您可以将数据推送到数组中,在循环之后可以插入批量数据。 喜欢这个:

如何使用node.js在mySQL中进行批量插入

 var bulk = data; // connection.query("insert into table (columns) values ?", bulk, function(err, result) { connection.destroy(); });