Почему мой запрос работает на pgAdming, но когда я выполняю его с сервера, я получаю ошибку запроса (ошибка: соединение разорвано)?

Я работаю над своим проектом 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();
});

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

});
Другие вопросы по тегам