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リクエストの成功を支援することができれば、私は大いに希望感謝します。ありがとう!
こんにちは、ありがとうございます。 res.end()を追加しました。 DBセーブコールの終了時に、要求はまだタイムアウトしています。他のアイデア? –
私の応答が空であることは間違いありませんでした。データベース保存コールバックで宣言したポイントオブジェクトも送信する必要がありました。 –