class PostMongoHandler: RequestHandler { func handleRequest(request: WebRequest, response: WebResponse) { let reqData = request.postBodyString // get the request body let jsonDecoder = JSONDecoder() // JSON decoder do { let json = try jsonDecoder.decode(reqData) as! JSONDictionaryType print("received request JSON: \(json.dictionary)") let userName = json.dictionary["userName"] as? String let firstName = json.dictionary["firstName"] as? String let lastName = json.dictionary["lastName"] as? String guard userName != nil else { // bad request, bail out response.setStatus(400, message: "Bad Request") response.requestCompletedCallback() return } do { // open mongodb connection let client = try MongoClient(uri: MONGODB_HOST) defer { client.close() } let status = client.serverStatus() switch status { case .Error: response.setStatus(500, message: "Server Error") response.requestCompletedCallback() return case .ReplyDoc: //Success let db = client.getDatabase(DATABASE) let collection = db.getCollection(TABLE) let bson = BSON() defer { bson.close() collection.close() db.close() } bson.append("userName", string: userName!) bson.append("firstName", string: firstName!) bson.append("lastName", string: lastName!) let result = collection.save(bson) switch result { case .Success: response.setStatus(201, message: "Created") default: response.setStatus(501, message: "Insert Error") } default: response.setStatus(500, message: "Unknown Error!") response.requestCompletedCallback() return } } catch { print("error decoding json from data: \(reqData)") response.setStatus(401, message: "Connection error!") } } catch { print("error decoding json from data: \(reqData)") response.setStatus(400, message: "Bad Request") } // this completes the request and sends the response to the client response.requestCompletedCallback() } }