我是NodeJS编程的新手, 创建了一个脚本,该脚本从数据库表 nodetest 读取,具有50K记录并在浏览器中显示,然后写入另一个名为' nodetestcopy'
var express = require('express');
var app = express();
var connection = require('express-myconnection');
var mysql = require('mysql');
var rows={};
var copyOfrows={
'id':null,
'f_name':null,
'l_name':null,
'title':null
};
var date1 = (new Date()).getTime();
app.use(
connection(mysql,{
host: 'localhost',
user: 'root',
password : '',
port : null, //port mysql
database:'test'
},'request')
);
app.get('/api/entries', function(req, res){
req.getConnection(function(err, connection) {
if(err) {
console.log(err);
res.status(500).send('Cannot get database connection');
} else {
connection.query("select * from nodetest", function(err, rows) {
if(err) {
console.log(err);
res.status(500).send(err);
} else {
res.write(''+JSON.stringify(rows));
var date2 = (new Date()).getTime();
console.log('Cnt : '+rows.length+' Took Time to execute :'+(date2 - date1)/(60*60));
//console.log(rows);
//Now insert in another table ' nodetestcopy'
for(var i in rows){
connection.query("insert into nodetestcopy set ?", rows[i], function(err, rows) {
if(err) {
console.log(err);
//res.status(500).send(err);
} else {
}
});
}
}
});
}
});
});
app.listen(3000);
此脚本首次运行,当我第二次刷新浏览器时,出现错误。
请指导我这里出了什么问题,我的做法是否正确? 循环记录50K次 for(var i in rows){...}
请为此提供一个可行的解决方案,并在代码错误的情况下纠正我。
由于
答案 0 :(得分:0)
您收到的错误消息是什么?另外,避免使用多个查询命中数据库的另一种方法是在一个查询中组合记录,然后进行一次数据库插入调用,如:
var query = 'insert into nodetestcopy values("';
for (var i in rows) {
query += rows[i] + '"';
if (i < rows.length) query += ',';
}
query += ')';
connection.query(query, function(err, rows) { ...