まず、私は次の質問と全く同じ問題があると言いたいと思います。How to add data to HTTPBody with PUT method in NSURLSession?。しかしそれは答えられなかったので、私は自分自身の質問をしました。PUTメソッドを使用したHTTPBodyのデータは失敗しますが、POSTでは動作しますか?
私たちは学校の割り当てのためのノードAPIを書いています。私たちはAPI全体をテストしました。 (何かが間違っている可能性は低いです。)
その後、私はiOSクライアントを使ってCRUDユーザーに取り掛かりました。 ユーザーの作成は完璧ですが、ユーザーを編集しようとすると、何か変なことが起こります。サーバー上のデータは未定義として到着します。
編集するには(このように使用されることを意図しているかどうかを知りません)
func saveUser(user: User, completionHandler: (String?, User?) -> Void) {
let url = NSURL(string: "https://pokeapi9001.herokuapp.com/api/users/")
let request = NSMutableURLRequest(URL:url!)
request.HTTPMethod = "POST"
let postString = "email=\(user.email)&password=\(user.password!)&role=\(user.role)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
print("error: \(error)")
}
do {
guard let data = data else {
throw JSONError.NoData
}
guard let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary else {
throw JSONError.ConversionFailed
}
//do specific things
} catch let error as JSONError {
completionHandler(error.rawValue, nil)
} catch let error as NSError {
completionHandler(error.debugDescription, nil)
}
}
task.resume()
}
が、これは完全に働いているのに注意し
:は、私は、ユーザーを保存するには、次のコードを使用しますユーザー私は、次のコードを使用します。
func editUser(user: User, completionHandler: (String?, User?) -> Void) {
let url = NSURL(string: "https://pokeapi9001.herokuapp.com/api/users/\(user.id!)")
let request = NSMutableURLRequest(URL:url!)
request.HTTPMethod = "PUT"
let postString = "email=\(user.email)&password=\(user.password!)&role=\(user.role)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
print("error: \(error)")
}
do {
guard let data = data else {
throw JSONError.NoData
}
guard let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary else {
throw JSONError.ConversionFailed
}
//do specific things
} catch let error as JSONError {
completionHandler(error.rawValue, nil)
} catch let error as NSError {
completionHandler(error.debugDescription, nil)
}
}
task.resume()
}
(元のコードは少し長いですが、私は、データの実際の掲載とは何の関係もなかった部分を削除)
を私は何が間違っているのか分からず、小さくて愚かなものになる可能性があります。助けてください。 @fiks
明確にすることから、入力した後
編集は、私が午前問題は、私はsaveUser方法で行うように私は「postString」editUser方法で同じように埋めることである。(少なくともI私はそうだと思う) しかし、saveUserメソッドでは、postStringはAPIに正しく渡されているようです(指定された値を持つ新しいユーザーを作成します)。 editUserメソッドは値を渡しません。
サーバーにコンソールログを記録すると、すべての値が「未定義」であることが示されます。 postStringがiOSの部分で正しいかどうかをテストするには、両方の文字列を出力しました。どちらも私は郵便配達の要求に何を参照してください、あなたはx-www-form-urlencodedでリクエストを送信していることから&パスワード=テスト&役割=管理者
node.jsの質問ではありません。間違ったタグ –
あなたはより具体的にエラーになりますか?チャールズとのリクエストを確認して、ここに投稿してください。 – fiks
申し訳ありませんが、APIはNode.jsで作成されているので、そこに追加する必要があります。 – user2145124