2017-05-27 2 views
0

iOS Swiftアプリケーションを使用してExpress.jsサーバーにHTTP POSTリクエストを作成しようとしています。投稿のリクエストでは、JSONデータを送信し、dictとSwiftyJSONを使用してJSONオブジェクトを作成します。ただし、要求はタイムアウトし続けます。私はそれがHTTP bodyを解析するために使用しているbody-parserと関係があると思います。ここに私のSWIFTコードは次のとおりです。iOS Swift Request Timing Outを持つExpress.jsサーバー

override func viewDidLoad() { 
    super.viewDidLoad() 


    var dict = ["name": "FirstChannel", "verified": 0, "private": 1, "handle": "firstChannel", "subscribers": 0] as [String : Any] 
    var jsonData = JSON(dict) 

    do { 
     let post:NSData = try jsonData.rawData() as NSData 
     var postLength: NSString = String(post.length) as NSString 
     var url = URL(string: "http://10.0.0.220:3000/channel/createChannel")! 
     var request = NSMutableURLRequest(url: url) 
     request.httpMethod = "POST" 
     request.httpBody = post as Data 
     request.setValue(postLength as String, forHTTPHeaderField: "Content-Length") 
     request.setValue("application/json", forHTTPHeaderField: "Content-Type") 
     request.setValue("application/json", forHTTPHeaderField: "Accept") 

     NSURLConnection.sendAsynchronousRequest(request as URLRequest, queue: OperationQueue.main, completionHandler: { (resposne, data, error) in 
      if(error != nil) { 
       print(error) 
      } 
      else { 
       print(data) 
      } 
     }) 



    } 
    catch { 
     print(error.localizedDescription) 
    } 
} 

そして、ここでは、私は私のexpress.jsルータで使用コードは次のとおりです。

var express = require('express'); 
var router = express.Router(); 
var http = require('http'); 
var url = require('url'); 
var util = require('util'); 
var bodyParser = require('body-parser') 
var ObjectID = require('mongodb').ObjectID; 

router.use(bodyParser.json()); 
router.use(bodyParser.urlencoded({extended: true})); 

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/my_db'); 

var channelSchema = mongoose.Schema({ 
    name: String, 
    verified: String, 
    private: String, 
    channelID: String, 
    handle: String, 
    subscribers: String 
}); 

var Channel = mongoose.model("Channel", channelSchema); 
router.post('/createChannel', bodyParser, function(req, res, next) { 
    req.body = true; 
    if(!req.body) return res.sendStatus(400); 
    var objID = new ObjectID(); 

    var newChannel = new Channel({ 
     name: req.body["name"], 
     verified: req.body["verified"], 
     private: req.body["private"], 
     channelID: objID, 
     handle: req.body["handle"], 
     subscribers: (req.body["subscribers"]) 
    }); 

newChannel.save(function(err, point){ 
    if(err) console.log(err); 
    else res.end(); 
}); 

}); 

誰も私を助けると、このPOSTリクエストの成功を支援することができれば、私は大いに希望感謝します。ありがとう!

答えて

1

あなたのルートの成功時にHTTP 200を返信しているようには見えません。エラーのみを処理します。あなたのルートの終わりにおそらくres.end();を追加して(おそらく、DB呼び出しからのコールバックで)、もう一度やり直してください。

+0

こんにちは、ありがとうございます。 res.end()を追加しました。 DBセーブコールの終了時に、要求はまだタイムアウトしています。他のアイデア? –

+0

私の応答が空であることは間違いありませんでした。データベース保存コールバックで宣言したポイントオブジェクトも送信する必要がありました。 –

関連する問題