2016-04-18 33 views
1

我正嘗試在Azure應用服務中創建EasyAPI(從Azure移動服務遷移)。該消息在迅速使用以下命令iOS應用程序發送:如何閱讀Azure App Service中的請求正文?

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

取出req.app.use線和參考bodyParser,爲移動應用服務將已經包含中間件爲您服務。如果您仍然遇到問題,那麼如何使用POST更新您的問題並使用當前代碼? –

+0

嗨,感謝您的建議。我用我試過的新代碼編輯我的問題。我刪除了req.app.use行,並將post與req替換爲get。身體尚未定義。它是我需要使用的身體屬性嗎?參數來自req.query,但req.body似乎並不包含任何內容。非常感謝。 –

+1

是的,req.body應該在服務器腳本中擁有主體內容。我懷疑客戶端不喜歡你傳遞給invokeAPI的嵌套字典。嘗試刪除查詢字典並使用所有參數定義param字典:'let param:Dictionary = [「collectionName」:theCollectionName,「name」:theName]' –

回答

0

感謝您的建議。 我在Azure移動應用程序iOS客戶端的github項目中報告了一個問題,他們建議問題可能出現在節點包azure-mobile-apps的版本中,情況就是如此。

azure-mobile-apps軟件包版本爲2.0.0。在我更新至2.1.0之後,req.body開始接收數據。

在這裏您可以鏈接到Gihub issue discussion

再次感謝您的建議。

GA

1

您需要調整應用程序的API容易被調用之前。當你添加中間件時,已經太晚了。幸運的是,bodyparser已經爲您執行。請注意,一般來說,您需要做一些需要身體的東西 - 比如POST - 來做到這一點。

由於這是已遷移的移動服務,因此您需要遵循移動服務說明 - 針對App服務記錄的內容通常僅適用於升級後的網站(即未在App Server上運行的網站尚未遷移)。

好消息是,如果你需要的話,我們有一些幫助。查看節點模塊:https://github.com/Azure/azure-mobile-apps-node-compatibility瞭解更多信息。

+0

嗨,對不起,我用了錯誤的名詞。該網站已升級。兩端的所有代碼均位於最新版本中。你有沒有關於如何實現body parser的例子?我正在實現一個POST方法。我錯誤地在這裏複製了get方法, –

+0

我編輯我的問題,改變了我對代碼所做的一些更改,但req.body仍未定義。 req.body是正確的屬性?謝謝。 –

-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調用與請求上的查詢語句完全相同。

希望幫助:)