我正在尝试在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
答案 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调用中附加的参数与请求中的查询语句完全相同。
希望有所帮助:)