正在从Azure插件获取响应



我继承了一个连接到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语句在我的函数中的结果时,我看到了两个结果:"after-post-results=[object object]"one_answers"after-post-results="。

我显然做错了什么,但我不明白是什么。我尝试了许多其他不同的方法,结果都同样令人不满意。就其价值而言,这个类的"get"脚本运行得很好。我想知道是否有人能帮我把这个"后"脚本做好。

正如您在日志中所指出的,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);
            }
        }
    });
};

最新更新