Как мне дождаться завершения запроса, прежде чем писать в объект ответа в обратном вызове в nodejs? - PullRequest
0 голосов
/ 18 ноября 2011

Я пишу функцию, которая выполняет SQL-запрос следующим образом:

function handle_request(req, res) {
    var data = "";
    if (req.method == 'POST') {

      req.on('data', function(chunk) {
          data += chunk.toString();
      });

      req.on('end', function() {
          sql_validator.validate_query(data, res, write_response);
      });
    }    
}

function write_response(response, is_valid){
    response.writeHead(200, "OK", {'Content-Type': 'text/html'});
    if(is_valid){
        response.end("Success");
    }
    else {
        response.end("Failure");
    }
}

Функция validate_query выглядит следующим образом:

function validate_query(query, response, callback) {

    var connection = DB.connect({
       //db_parameters
    }, function(err) {
        if (err){
            console.log("Failed to connect: " + err);
        }else{
            console.log("Connection established");
            connection.query(query, function(err, fields, rows, status) {
                if (err){
                    console.log(err);
                    callback(response, false);
                    throw err;
                }
                else{
                    callback(response, true);
                }
            });
        }
    });    
}

Проблема в том, что ответ не полученна стороне запрашивающей стороны (который является кодом PHP).

При распечатке объекта ответа на различных этапах оказывается, что объект ответа становится недоступным для записи к моменту обратного вызова (response, true / false).

Есть ли способ написать ответ после завершения выполнения запроса?

...