2017-01-25 1 views
-3

여기에서 확인할 수있는 node.js 서버가 있습니다 : https://github.com/achompolov/srv-EatHealthy/blob/api-v1/server.js. 서버가 MongoDB에 연결되어 있고 클라이언트/서버가 nodejs 및 swift 용 socket.io를 사용하여 연결되어 있습니다. SignUp 버튼을 클릭 할 때마다 새 사용자를 생성해야하지만 POST/GET 메서드를 신속하게 가져 와서 서버로 보내 데이터베이스에 사용자를 생성하는 방법을 모릅니다. 여기에 가입 버튼의 swift3 코드 :이Node.js & Swift3 REST API

var request = URLRequest(url: URL(string: "http://localhost:8080/api/users")!) 
    request.httpMethod = "POST" 

를 사용하여 시도

/* Send the sign up form to the server */ 
@IBAction func signUpButtonClicked(_ sender: Any) { 
    SocketIOManager.sharedInstance.socket.emit("signUpClicked", [signUpNameTextField.text!, 
                   signUpEmailTextField.text!, 
                   signUpUsernameTextField.text!, 
                   signUpPasswordTextField.text!, 
                   signUpBirthDate.text!, 
                   signUpGender.text!]) 
} 

하지만 어떻게 그 후 할 생각이 없습니다. 나는 서버 측에서 포스트/get 메소드를 만들었고 Postman을 사용하여 MongoDB를 게시/삭제/가져올 수 있습니다. 나는 도움을 감사 할 것이다. 다음은 Postman 및 MongoDB Compass가 서버 측에서 작동하는지 확인하기위한 그림입니다.

Postman with some test users created

MongoDB Compass with the test users created

+0

가능한 복제 [HTTP에게 스위프트 3의 요청은] (http://stackoverflow.com/questions/38292793/http-requests-in-swift-3) – muescha

+0

당신이 구글 않았다 https://www.google.com/search?q=URLRequest+post+swift+3? – muescha

+0

[Alamofire] (https://github.com/Alamofire/Alamofire)를 찾아보십시오 ([Moya] (https://github.com/Moya/Moya)에 추가 가능). – muescha

답변

0

원시 스위프트

당신이 스위프트의 HTTP POST 요청의 가장 단순한 원시 버전을 찾고 있다면, 당신이 시도 할 수 있습니다 :

1). 헤더, 끝점 및 메서드 유형 (POST)을 사용하여 요청을 구성하십시오. 여기서는 application/json 인코딩을 사용한다고 가정합니다.

var request = URLRequest(url: URL(string: "https://yoursite.endpoint.com/")!) 
    request.httpMethod = "POST" 
    request.addValue("application/json", forHTTPHeaderField: "Content-Type") 

//And if you need an Auth Key, add this line 
    request.addValue("key=someAuthkey", forHTTPHeaderField: "Authorization") 

2). JSON을 준비하십시오.

let RequestDetailsDictionary = [ 
    { 
    "id": "ObjectID('09374091375409984029')", 
    "name": "testUser",  
    "__v": 0 
    } 
] 

4). dotrycatch에 요청을 동봉 :

let err = NSError() 

do{ 
    request.httpBody = try JSONSerialization.data(withJSONObject: RequestDetailsDictionary, options: []) 
}catch{ 
    print("ERROR: \(err)") 
} 

URLSession.shared.dataTask(with: request, completionHandler: { 
    (data, response, error) in 
    if(error != nil){ 
     print("ERROR: \(error)") 
    }else{ 
     do{ 
      let resp = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String : AnyObject] 
      print("RESPONSE: \(resp)") 

     }catch let error as NSError{ 
      print("ERROR: \(error)") 
     } 
    } 
}).resume() 

Alamofire

권장하고 쉬운 방법, Alamofire를 설치 한 다음 같은 것을 할 것입니다. 이 x-www-form-urlencoded을 사용하고, 참고 :

var headers: HTTPHeaders = [ 
    "Content-Type": "application/x-www-form-urlencoded" 
] 

let parameters: Parameters = [ 
    "id": "\(number)", 
    "name": "ObjectID(908227c74d576fa7c)", 
    "__v": 0 
] 

let urlString = "https://yoursite.endpoint.com/" 
var URLs: URL? 
do{ 
    URL = try urlString.asURL() 

}catch{ 
    print("ERROR: \(AFError.self)") 
} 

Alamofire.request(URL!, method: .post, parameters: parameters, encoding: URLEncoding(destination: .httpBody), headers: headers).response{ response in 

    if response.error != nil{ 
     print(response.error!) 
     return 
    } 

    //do something HERE with your successful request 

    }