为什么我的查询处理pgAdming但是当我从服务器执行它时出现查询错误(错误:连接已终止)?

时间:2015-10-13 13:54:37

标签: javascript node.js postgresql node-postgres

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

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

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

{{1}}

1 个答案:

答案 0 :(得分: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();

});