Azure移动应用自定义API异常

3

我想获取社交网络中我的朋友的帖子。由于在客户端中无法使用类似于“INNER JOIN”的东西,我必须使用自定义API。以下是我的方法:

Android客户端:

List<Pair<String, String>> params = new ArrayList<Pair<String, String>>();
    params.add(new Pair("id", user.getId()));
    params.add(new Pair("otherParam", otherParam));

    client.getClient().invokeApi("getFeed", "POST", params, new ApiJsonOperationCallback() {
        @Override
        public void onCompleted(JsonElement jsonElement, Exception exception, ServiceFilterResponse response) {
            System.out.println("exception: " + exception.toString());
            GsonBuilder gsonb = new GsonBuilder();
            Gson gson = gsonb.create();

            JsonArray array = jsonElement.getAsJsonArray();
            for (int i = 0; i < array.size(); i++) {
                postList.add(gson.fromJson(array.get(i).getAsJsonObject().toString(), Post.class));
            }
        }
    });

feed.js:

var api = {
post: (request, response, next) => {
    var query = {
        sql: 'SELECT * FROM Posts INNER JOIN Friends ON Posts.userId = Friends.followingId WHERE Friends.followingId = @id ORDER BY Posts.createdAt DESC',
        parameters: [
            { id: 'id', otherParam: 'otherParam' }
        ]
    };

    request.azureMobile.data.execute(query)
        .then(function (results) {
            response.json(results);
        });
    }
};

module.exports = api;

我甚至不确定这是否是正确的操作方式,或者我们是否可以像这样访问易表中的表格,但异常打印中没有任何详细信息。异常为“处理请求时出错”。提前致谢。

1个回答

2

您的代码非常接近 - 只是 SQL 语句参数的指定格式还不太正确。您需要按以下格式指定参数:

var query = {
    sql: 'SELECT * FROM Posts INNER JOIN Friends ON Posts.userId = Friends.followingId WHERE Friends.followingId = @id ORDER BY Posts.createdAt DESC',
    parameters: [
        { name: 'id', value: 'id' }, 
        { name: 'otherParam', value: 'otherParam' }
    ]
};

相关API文档请参考http://azure.github.io/azure-mobile-apps-node/module-azure-mobile-apps_src_data_execute.html

如果您需要从服务器获取更多的调试信息,可以提高日志记录级别。如果您在本地运行,请使用额外的命令行参数来运行应用程序:

node --debug app.js ---logging.level silly

如果您正在使用Azure托管,可以将应用程序日志(文件系统)的日志级别设置为详细,并打开日志流。这将向您显示正在执行的确切SQL语句和参数。


谢谢,看起来问题已经解决了。另外,invokeApi 看起来已经过时了,这不是正确的做法吗? - shanks
为什么你说 invokeApi 看起来已经过时了? - Dale Anderson
在Android Studio中它看起来已经过时了,但是还是可以工作的,谢谢。 - shanks
我和一位同事谈到了弃用问题 - invokeApi有两种实现方式,一种使用回调,另一种使用futures。使用回调的实现已被标记为弃用,并可能在未来的版本中被移除。 - Dale Anderson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接