2017-10-21 14 views
0

J'ai installé la demande post api qui fonctionne très bien avec postier, mais dans mon code rapide, il ne transmet pas les params à la demande.demande POST ne comprend pas params JSON

let parameters = ["spotId" : spotId, 
         "voteruptime" : currentDate, 
         "voterupid" : userId] as [String : Any] 

    guard let url = URL(string: "http://example.com:3000/upvote") else { return } 
    var request = URLRequest(url: url) 
    request.httpMethod = "POST" 
    request.addValue("Application/json", forHTTPHeaderField: "Content-Type") 
    guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: []) else { return } 
    request.httpBody = httpBody 
    print(request.httpBody) 

    let session = URLSession.shared 
    session.dataTask(with: request) { (data, response, error) in 
     if let response = response { 
      print(response) 
     } 

     if let data = data { 
      do { 
       let json = try JSONSerialization.jsonObject(with: data, options: []) 
       print(json) 
      } catch { 
       print(error) 
      } 
     } 

     }.resume() 

J'obtenu une réponse

<NSHTTPURLResponse: 0x618000a26560> { URL: http://example.com:3000/upvote } { status code: 200, headers { 
Connection = "keep-alive"; 
"Content-Length" = 28; 
"Content-Type" = "application/json; charset=utf-8"; 
Date = "Sat, 21 Oct 2017 03:11:46 GMT"; 
Etag = "W/\"1c-BWaocQVSSeKjLiaYjOC8+MGSQnc\""; 
"X-Powered-By" = Express;} } 

{ 
    n = 0; 
    nModified = 0; 
    ok = 1; 
} 

Le code du serveur Node JS est:

app.post('/upvote', function(req, res){ 

    Spots.update({_id: req.query.spotId},{$push:{'upvotes':{'voterupid':req.query.voterupid,'voteruptime':req.query.voteruptime}}},function(err, Spots){ 
    console.log(req.url) 


if(err){ 
       throw err; 
       } 
    res.json(Spots); 
}); 

}); 

J'ai aussi essayé alamofire, et il est le même problème, pas params envoyé au serveur.

Répondre

0

je crois que le problème est que req.query accède à des données transmises sur la chaîne de requête, alors que vous envoyez des messages les données dans le corps de la demande.

Pour accéder au corps, vous devez utiliser le corps-analyseur comme décrit dans plusieurs réponses ici: How to access the request body when POSTing using Node.js and Express?

+1

j'ai changé req.query à req.body et cela a fonctionné. Merci beaucoup Mike. – Thamer