2014-10-29 9 views
0

Я унаследовал разработку приложения iOS, которое подключается к мобильной службе Azure, и я застрял в получении приемлемого ответа от моих операций вставки. В частности, я хочу вернуть объект, который был вставлен или, по крайней мере, значение его поля id, из пользовательского сценария API, который был создан предыдущим разработчиком в этом проекте.Получение ответа от вставки Azure

усеченная версия сценария пользовательского API, я использую выглядит следующим образом:

exports.post = function(request, response) { 
    var mssql = request.service.mssql; 
    var sql = "INSERT INTO Reservation (<field names>)" + 
    " VALUES (<field values>); " 
    +"SELECT id FROM Reservation WHERE __updatedAt = (SELECT MAX(__updatedAt) FROM Reservation);"; 

    mssql.query(sql, { 
     success: function(results) { 

      console.log("after post - results = " + results); 

      response.send(statusCodes.OK, results); 
     } 
    }); 
}; 

Когда я запустить приложение IOS и после резервирования (с использованием класса AFNetworking для связи с сервером), я получаю назад объект ответа с пустым массивом. Кроме того, проверяя журнал Azure для результатов инструкции console.log в моей функции, я вижу два результата: «после post-results = [object Object]» и «after post-results =».

У меня явно что-то не так, но я не понимаю, что. Я пробовал ряд других подходов, все с одинаково неудовлетворительными результатами. Для чего это стоит, сценарий «get» для этого класса работает отлично. Интересно, может ли кто-нибудь помочь мне получить этот сценарий «post».

ответ

0

Как вы отметили в своих журналах, обратный вызов успеха для вызова mssql.query вызывается дважды - поскольку у вас есть два оператора в вашем запросе. Когда вы сначала вызываете response.send, это ответ, который отправляется обратно клиенту. Первый обратный вызов будет содержать результаты для вызова INSERT, который не является тем, что вы хотите вернуть. Вы должны использовать флаг для указания того, какой результат вы получите, и только вернуть его, если он вам нужен:

exports.post = function(request, response) { 
    var mssql = request.service.mssql; 
    var sql = "INSERT INTO Reservation (<field names>)" + 
    " VALUES (<field values>); " 
    +"SELECT id FROM Reservation WHERE __updatedAt = (SELECT MAX(__updatedAt) FROM Reservation);"; 

    var firstCall = true; 
    mssql.query(sql, { 
     success: function(results) { 
      console.log("after post - results = " + results); 
      if (firstCall) { 
       firstCall = false; 
      } else { 
       response.send(statusCodes.OK, results); 
      } 
     } 
    }); 
}; 
Смежные вопросы