2015-04-06 71 views
1

我想解析文件與數據並將其插入數據庫中,解析順利,當我做一個查詢它運行良好,但是當我試圖讓這個查詢工作在循環它給我異步查詢到數據庫在nodeJS

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:,[email protected]/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

試圖改變parser.on( 「結束」,查詢(1))到parser.on( 「結束」,執行console.log(輸出))來檢查你有正確的數據,您conString有一個逗號後亞歷山大:我不認爲它應該是有 – Molda 2015-04-06 08:30:26

+0

@Molda逗號密碼 和執行console.log(輸出)的一部分: [] events.js:130 擲類型錯誤(「監聽器必須是一個函數「); 他認爲console.log不是一個函數? 但陣列是由於某種原因爲空 – Alexander 2015-04-06 08:37:45

+0

@Molda parser.on(「end」,function(){ console.log(output); }); 運作良好,我得到: [[ '1', 'Агафонова', 'Анна', 'Игоревна', 'Архангельск,Гайдараул,61'], [ '2', ' Акимова', 'Мария', 'Максимовна', 'Архангельскаяобласть,Вилегодскийрайон,с。 Ильинско-Подомское,25' ], [ '3', 'Алькин', 'Руслан', 'Валерьевич', 「Архангельскаяобласть,Вельск,пер。 Макаренко,14']等等.... – Alexander 2015-04-06 08:41:37

回答

1

結束了這一點,抱歉,但我不明白關於pg和獲取客戶端,所以當我做了所有喜歡在那裏的文檔所有工作正常,謝謝stackoverflow :)如果我沒有試圖解釋這個給你帶來麻煩我想我可能會在更多時間裏尋找錯誤。

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(); 
    } 
}