Why is my query working on pgAdming but when I execute it from the server I get a query error (Error: Connection Terminated)?

Why is my query working on pgAdming but when I execute it from the server I get a query error (Error: Connection Terminated)?

我正在处理我的 Capstone 项目,它需要在数据库中存储一些遥测数据。我将 PostgreSQL 9.5 用于数据库和服务器节点。

我的问题是,当我尝试从服务器发送查询时,出现查询错误 [错误:连接已终止]。如果我使用 JSON.stringify(err),我只会看到空括号作为结果 {}。有趣的是,如果我使用 pgAdmin 客户端并执行相同的查询,则记录添加成功,没有任何错误。

这是我在服务器中用来发送查询的代码:

client.connect(function(err) {
    if(err){
        return console.error('could not connect to postgres', err);
    }

    //Checks if there is survey data to process
    if(surveyFlag){

        //Query to insert survey record
        //Returns survey record's auto-generated id to use it when creating or updating the             //telemetry record in the database 
        var query = 'INSERT INTO survey_response (perceived_risk, actual_risk) '+
                    'VALUES (' + telemetryRecord.survey.perceivedRisk +', ' +                   
                                 telemetryRecord.survey.actualRisk +') ' +
                    'RETURNING survey_id';

        client.query(query, function(err, result) {

        console.log("Query: " + query);

                if(err) {
                    console.log(err);
                    return console.error('error running survey query', err);
                }

                surveyID = result.rows[0].survey_id;    

                //Testing
                console.log ("Survey response added with ID: " + surveyID);


        });

            //Close the connection  
        client.end();
});

代码client.end()与代码client.query()放在同一层。由于 client.query() 是异步的,因此 client.end() 会在您开始查询后立即被调用。当查询返回时,客户端已经结束,这是导致问题的原因。

尝试将 client.end() 代码放在 client.query() 的回调函数中。

client.query(query, function(err, result) {
  console.log("Query: " + query);

  if(err) {
    console.log(err);
    return console.error('error running survey query', err);
  }

  surveyID = result.rows[0].survey_id;    

  //Testing
  console.log ("Survey response added with ID: " + surveyID);

  //Close the connection  
  client.end();

});