使用node.js将数据插入mysql,但脚本挂起

时间:2015-02-24 08:38:30

标签: mysql node.js sql-insert

我已经有了这个脚本来读取文件,然后将数据插入到mysql表中。该脚本有效,但它挂起,所以我必须按CTRL-C来停止脚本。 但脚本应该正常停止,我需要更改什么?

var fs = require('fs');
var filename;
var myGID;
filename = "data/insertUser1_next.json";

function get_line(filename, line_no, callback) {
fs.readFile(filename, function (err, data) {
if (err) throw err;

  // Data is a buffer that we need to convert to a string
  // Improvement: loop over the buffer and stop when the line is reached
  var lines = data.toString('utf-8').split("\n");

  if(+line_no > lines.length){
    return callback('File end reached without finding line', null);
  }

  // lines
  callback(null, lines[0], lines[1], lines[2], lines[3]);
});
}

get_line(filename, 0, function(err, line, line2, line3, line4){


line = line.replace(/(\r\n|\n|\r)/gm,"");
line2 = line2.replace(/(\r\n|\n|\r)/gm,"");
line3 = line3.replace(/(\r\n|\n|\r)/gm,"");
/*line4 = line4.replace(/(\r\n|\n|\r)/gm,"");*/
console.log('The line: ' + line);
console.log('The line2: ' + line2);
console.log('The line3: ' + line3);
console.log('The line4: ' + line4);

var post  = {gid: line, uid: line2};
var post2  = {uid: line2, displayname: line3, password: line4};

var mysql      = require('mysql');    
var db_config = {
    host     : '123.456.789.012',
    user     : 'user',
    password : 'password',
    database : 'maindata'
};

var con = mysql.createPool(db_config);

    con.getConnection(function(err){
                if (err) {
                    console.log(err);
                    return;
                }
        con.query('INSERT INTO group_user SET ?', post, function(err, result) {
                if (err) {
                    console.log(err);
                    return;
                }

        });
        con.query('INSERT INTO users SET ?', post2, function(err, result) {
                if (err) {
                    console.log(err);
                    return;
                }

        });
    });
});

3 个答案:

答案 0 :(得分:1)

Here你可以看到发生了什么:

  

完成使用池后,必须结束所有连接,否则Node.js事件循环将保持活动状态,直到MySQL服务器关闭连接。如果在脚本中使用池或尝试正常关闭服务器时,通常会执行此操作。要结束池中的所有连接,请使用池上的end方法:

pool.end(function (err) {
  // all connections in the pool have ended
});

因此,如果在查询完成后放置con.end(),脚本将正常终止

答案 1 :(得分:0)

嘿我建议永远安装并启动节点servers.js永远你不需要任何终端打开。

你需要在最后关闭你的mysql连接,以阻止你挂起问题,我想。

npm install -g forever
npm install forever

//FOR your Problem

con.end(function(err){
// Do something after the connection is gracefully terminated.
});

con.destroy();

以下语句将关闭连接,以确保处理队列中的所有查询。请注意,这是一个回调函数。

connection.end(function(err){
// Do something after the connection is gracefully terminated.
});

以下语句将终止指定的套接字并立即关闭连接。此外,没有为连接触发的回调或事件。

 connection.destroy();

答案 2 :(得分:0)

以下语句将关闭连接,以确保处理队列中的所有查询。请注意,这是一个回调函数。



connection.end(function(err){
// Do something after the connection is gracefully terminated.

});




以下语句将终止指定的套接字并立即关闭连接。此外,没有为连接触发的回调或事件。



 connection.destroy();