从Azure插入获取响应

时间:2014-10-29 23:34:17

标签: azure-mobile-services

我继承了连接到Azure移动服务的iOS应用程序的开发,而且我仍然坚持从插入操作中获得可接受的响应。具体来说,我想从这个项目的前一个开发人员创建的自定义API脚本中取回已插入的对象,或者至少返回其id字段的值。

我使用的自定义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语句的结果,我看到两个结果:&#34; post-results = [object Object]&#34;和&#34;在后期结果=&#34;。

我明显做错了什么,但我不明白什么。我已经尝试了许多其他不同的方法,所有方法都具有同样令人不满意的结果。对于它的价值,&#34; get&#34;这个类的脚本运行得很好。我想知道是否有人可以帮助我做到这一点&#34; post&#34;脚本吧。

1 个答案:

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