如何在Azure App Service中读取请求的正文?

时间:2016-04-18 17:51:21

标签: ios node.js swift2 azure-mobile-services

我正在尝试在Azure应用服务中创建EasyAPI(从Azure移动服务迁移)。该消息是使用swift中的以下命令从iOS应用程序发送的:

    let query: Dictionary<String, AnyObject> = ["name": theName]
    let param: Dictionary<String, AnyObject> = ["collectionName": theCollectionName, "query": query]

    AOAppDelegate.client!.invokeAPI("FMDataAPI", body: param, HTTPMethod: "POST", parameters: nil, headers: nil, completion: {(objects, httpResponse, error) in

       if error == nil {

          //Process response

       } else {
          print(error!.userInfo)
       }
    })

在API中,我在EasyAPI MyEasyAPI中有以下Javascript代码:

module.exports = {
"post": function (req, res, next) {
    console.log("---------------------------------------")
    console.log(req.body)
},

但身体保持不确定。

有什么建议吗?

谢谢,

GA

3 个答案:

答案 0 :(得分:1)

您需要在调用easy API之前调整应用程序。当你添加中间件时,为时已晚。幸运的是,bodyparser已经为您实现了。请注意,通常情况下,您需要做一些期望身体的事情 - 比如POST - 来做这件事。

由于这是迁移的移动服务,您需要按照移动服务的说明进行操作 - 针对App Service记录的内容通常仅适用于升级后的站点(即在App Service上运行的尚未迁移的站点)

好消息是,如果您需要,我们会在那里提供一些帮助。查看节点模块:https://github.com/Azure/azure-mobile-apps-node-compatibility以获取更多信息。

答案 1 :(得分:0)

感谢您的建议。 我在Azure移动应用程序iOS客户端的github项目中报告了一个问题,他们建议问题可能出在节点包azure-mobile-apps的版本中,情况就是这样。

azure-mobile-apps软件包的版本为2.0.0。在我更新到2.1.0后,req.body开始接收数据。

您可以在此处找到Gihub issue discussion

的链接

再次感谢您的建议。

GA

答案 2 :(得分:-1)

我的自定义API有一个类似的用例,并通过查询语句获取参数数据 - 我使用了GET调用,但这不应该有任何区别:

module.exports = {
    get: function (req, res, next) {
        var param = req.query.completed;
        console.log(param);
    }
};

在iOS端使用附加参数字典的调用如下所示:

[self.client invokeAPI:@"resetMyItems"
                  body:nil
            HTTPMethod:@"GET"
            parameters:@{@"completed": @(self.completed)}
               headers:nil
            completion:^(id result, NSHTTPURLResponse * _Nullable response, NSError * _Nullable error) {
                if (error == nil) {
                    NSLog(@"Got answer from my own API: %@", result);
                }
                else {
                    NSLog(@"Something went wrong with POST api call: %@", error);
                }
            }
 ];

我搜索了很长时间才发现,您在iOS上的API调用中附加的参数与请求中的查询语句完全相同。

希望有所帮助:)