2014-10-29 2 views
0

Azure 모바일 서비스에 연결하는 iOS 응용 프로그램의 개발을 상속 받았으며 삽입 작업에서 받아 들일 수있는 응답을 얻지 못했습니다. 특히,이 프로젝트의 이전 개발자가 만든 사용자 지정 API 스크립트에서 삽입 된 개체 또는 최소한 ID 필드의 값을 다시 가져 오려고합니다.Azure 삽입물의 응답 받기

내가 좋아하는 외모를 사용하고 사용자 정의 API 스크립트의 잘린 버전 : 나는 iOS 앱을 실행하고 (서버와 통신하기 위해 AFNetworking 클래스를 사용하여) 예약을 게시 할 때, 내가 할

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

빈 배열이있는 응답 객체를 반환하십시오. 또한 Azure 로그에서 내 함수의 console.log 문 결과를 검사하면 "after-results = [object Object]"와 "post-results ="후에 두 가지 결과가 나타납니다.

분명히 뭔가 잘못하고 있지만 분명히 이해하지 못합니다. 나는 다른 많은 접근 방식을 시도해 보았는데 모두 비슷하게 불만족스러운 결과를 보였다. 가치가있는 것을 위해,이 클래스의 "get"스크립트는 잘 작동합니다. 나는이 "포스트"스크립트를 제대로 얻을 수있는 사람이 있는지 궁금합니다.

답변

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