【问题标题】:async queries to database in nodeJSnodeJS中对数据库的异步查询
【发布时间】:2015-04-07 12:35:51
【问题描述】:

我正在尝试用数据解析文件并将其插入数据库,解析顺利,当我进行一个查询时它运行良好,但是当我试图让这个查询循环工作时它给了我

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

现在错误消失了,但数据库中没有插入任何内容

【问题讨论】:

  • 尝试将 parser.on("end", query(1)) 更改为 parser.on("end", console.log(output)) 以检查您的数据是否正确并且您的 conString 有alexander 后面的逗号:我不认为它应该在那里
  • @Molda 逗号是密码和 console.log(output) 的一部分:[] events.js:130 throw TypeError('listener must be a function');他认为console.log 不是函数?但是数组由于某种原因是空的

标签: node.js postgresql express


【解决方案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();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 2014-08-05
    • 2023-03-26
    • 2020-06-19
    相关资源
    最近更新 更多