0

我正在开发我的 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();
});
4

1 回答 1

1

代码与代码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();

});
于 2015-10-13T20:57:58.233 回答