我试图用数据解析文件并将其插入数据库中,解析顺利,当我进行一次查询时它运行得很好,但是当我试图让这个查询在循环中工作时它会给我< / p>
values: [output[i][0], output[i][1], output[i][2], output[i][3], o
^
TypeError: Cannot read property '0' of undefined
首先我尝试使用简单的for循环但是在对nodeJS进行异步研究之后我发现我需要在回调中执行此操作,但它没有工作,我认为解析不是通过启动查询的时刻完成的例行公事,但我不确定。
var express = require('express');
var pg = require('pg');
var csv = require('fast-csv');
var app = express();
var conString = "postgres://alexzander:,tjdekma@localhost/db2015";
var output = [];
var client = new pg.Client(conString);
parser = csv.fromPath("public/dataInputOld/tblOwner.txt", {delimiter: ';'});
parser.on("data", function (data) {
output.push(data);
});
parser.on("end", query(1));
function query(i) {
if (i < 30) {
client.query({
text: 'INSERT INTO tblowner ' +
'(intownerid, txtownersurname, txtownername, txtownersecondname, txtaddress)' +
' VALUES ($1, $2, $3, $4, $5)',
values: [output[i][0], output[i][1], output[i][2], output[i][3], output[i][4]]
}, function (err) {
if (err) {
console.log('error: ' + err)
}
else {
console.log(i);
query(i + 1);
}
});
}
}
app.get('/', function (req, res) {
res.send(JSON.stringify(output[1][0]));
});
var server = app.listen(3001, function () {
var host = server.address().address;
var port = server.address().port;
console.log('App listening at http://%s:%s', host, port);
});
更新:现在我认为我没有很好地连接到数据库
Update2:我改变了
parser.on("end", query(1));
到
parser.on("end", function(){
query(1);
});
现在错误消失了,但没有任何内容插入数据库
答案 0 :(得分:1)
结束了这一点,很抱歉,但我对pg并没有充分了解pg并让客户端进入它,所以当我做了所有类似的例子时,文档都运行良好,谢谢stackoverflow :)如果我没有&#39;试着向你解释这个问题,我想我可能会在很长一段时间内寻找错误。
parser.on("end", function () {
client.connect(function(err){
if (err) {
return console.error('could not connect to postgres', err);
}
query(1);
});
});
function query(i) {
if (i < 30) {
client.query({
text: 'INSERT INTO tblowner ' +
'(intownerid, txtownersurname, txtownername, txtownersecondname, txtaddress)' +
' VALUES ($1, $2, $3, $4, $5)',
values: [output[i][0], output[i][1], output[i][2], output[i][3], output[i][4]]
}, function (err) {
if (err) {
console.log('error: ' + err)
}
else {
console.log(i);
query(i + 1);
}
});
}else{
client.end();
}
}