我已经有了这个脚本来读取文件,然后将数据插入到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;
}
});
});
});
答案 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();