Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift POST请求以错误格式将正文发送到node.js/express应用程序_Ios_Json_Node.js_Swift_Express - Fatal编程技术网

Ios Swift POST请求以错误格式将正文发送到node.js/express应用程序

Ios Swift POST请求以错误格式将正文发送到node.js/express应用程序,ios,json,node.js,swift,express,Ios,Json,Node.js,Swift,Express,我正在尝试使用Swift从ios应用程序发送JSON对象。除了node.js/express后端上的请求主体中的主体采用aca笨拙的格式外,其他一切都可以正常工作,在这种格式中,用Swift解析的整个JSON对象就是实际的键。因此,服务器上接收到的是: req.body = { '{"email":"email","password":"password"}': '' } 我希望它是: { "email":"email","password":"password" } 因此,我可以访问键值,

我正在尝试使用Swift从ios应用程序发送JSON对象。除了node.js/express后端上的请求主体中的主体采用aca笨拙的格式外,其他一切都可以正常工作,在这种格式中,用Swift解析的整个JSON对象就是实际的键。因此,服务器上接收到的是:

req.body = { '{"email":"email","password":"password"}': '' }
我希望它是:

{ "email":"email","password":"password" }
因此,我可以访问键值,例如,
req.body.email

我对ios和nodejs之间的http通信还不熟悉,所以这可能是 很正常,但很烦人

我的ios http post代码是:

   let url = NSURL(string: "http://localhost:3000/users")

   let request = NSMutableURLRequest(URL:url!)

   request.HTTPMethod = "POST"

   var login_details: [String: AnyObject] = [
     "email" : "\(self.email_field.text)",
     "password" : "\(self.password_field.text)"
   ]

   let valid = NSJSONSerialization.isValidJSONObject(login_details)

   var err: NSError?

   request.HTTPBody = NSJSONSerialization.dataWithJSONObject(login_details, options: nil, error: &err)

   let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
     data, response, error in       
     if error != nil {
       println("error=\(error)")
       return
     }
   }
我的节点路由器模块是:

router.post('/', function(req, res) {
  console.log(req.body);
});

节点仅当知道JSON请求体是正确的内容类型时,才会自动将其解析为对象。您有两种可能的解决方案,可以使用其中一种,但不能同时使用两种,因为它们相互冲突

1) 客户端,更正确。设置正确的内容类型。将此添加到您的Swift代码中:

request.setValue("application/json" forHTTPHeaderField:"Content-Type")
2) 服务器端。只需自己解析身体:

parsedBody = JSON.parse(body)
// parsedBody will now be an object