2017-03-31 3 views
0

Ich bin ziemlich neu in der Backend-Programmierung mit JavaScript und habe Code geschrieben, um eine Datenbank abzufragen und die Ergebnisse als JSON zurückzugeben. Es scheint im Browser korrekt zu funktionieren, aber mein iOS-Code erhält keine Daten. Ich habe es beim Testen vor Ort laufen lassen. Wenn du in meinem Swift nach den Daten aus der URL suchst, bekomme ich den NO JSON aus der print-Anweisung in den Haken.Probleme beim Abrufen von JSON-Daten

JavaScript

'use strict'; 
var util = require('util'); 
var sql = require("mssql"); 
var express = require('express'); 
var port = process.env.PORT || 1337; 

var membershipNumber; 
var queryString; 

var app = express(); 

app.get('/membership/:number', function (req, res) { 
    console.log("\nPARAMS:"); 
    console.log(req.params.number); 

    membershipNumber = req.params.number; 
    queryString = util.format('SELECT major_key, company, status, paid_thru FROM name WHERE major_key = \'%s\' and member_record = 1', membershipNumber); 
    console.log("\nQUERY:"); 
    console.log(queryString); 

    res.setHeader('Content-Type', 'application/json'); 
    res.set('Content-Type', 'application/json'); 
    membershipStatusQuery(queryString, res); 
}); 

app.get('/', function (req, res) { 
    var dictionary = []; 
    dictionary.push({ 
     key: "none" 
    }); 
    var jsonDict = JSON.stringify(dictionary); 

    res.setHeader('Content-Type', 'application/json'); 
    res.set('Content-Type', 'application/json'); 
    res.send(jsonDict); 
}); 

function membershipStatusQuery(query, response) { 
    var config = { 
     server: 'DB_Server', 
     database: 'testDB', 
     user: 'sa', 
     password: 'password', 
     port: 1433 
    }; 

    var connection = new sql.Connection(config); 

    connection.connect().then(function() { 
     var req = new sql.Request(connection); 
     req.query(query).then(function (recordset) { 
      connection.close(); 
      response.send(results); 
     }) 
      .catch(function (err) { 
       console.log(err); 
       connection.close(); 
       response.send(err); 
      }); 
    }) 
     .catch(function (err) { 
      console.log(err); 
      response.send(err); 
     }); 
} 

app.listen(port, function() { 
    console.log("Listening on port %s", port); 
}); 

ERGEBNISSE

[{"major_key":"0001354648","company":"Membership of David Metzgar","status":"A","paid_thru":"2017-10-31T00:00:00.000Z"}] 

iOS Swift Code Klasse JSON von URL zu erhalten:

import UIKit 

class GetJSON: NSObject { 

    func getJSONFrom(urlString: String) -> JSON { 
     let url = URL(string: urlString) 
     var data = Data() 

     do { 
      data = try Data(contentsOf: url!) 
     } catch { 
      print("No JSON") 
      // TODO: Display error 
     } 

     let json = JSON(data: data) 
     return json 
    } 
} 

Methode von einer anderen Klasse JSON zu verwenden:

func getQueryResultsJSON() { 
     print("http://localhost:1337/membership/\(memberNumberTextField.text!)") 
     // let jsonURL = "http://localhost:1337/membership/\(memberNumberTextField.text!)" 
     let jsonURL = "http://localhost:1337/membership/0001354648" 
     let getJSON = GetJSON() 
     self.resultsArray = getJSON.getJSONFrom(urlString: jsonURL) 
     if let dictionary = resultsArray?[0].dictionaryObject { 
      if let status = dictionary["status"] { 
       if status as! String == "A" { 
        print(dictionary) 
        print("Provided membership is active") 
        // membership is active 
        // TODO: save info and display membership card 
       } else { 
        print(dictionary) 
        print("Provided membership is NOT active") 
        // membership is not active 
        // TODO: display alert 
       } 
      } else { 
       print("DOESN'T EXIST!") 
       // membership number does not exist 
       // TODO: display alert 
      } 
     } else { 
      print("NOTHING!") 
     } 
    } 

Antwort

0
 let url = NSURL(string: "your url")! 
     let request = NSMutableURLRequest(url: url as URL) 
     // request.httpMethod = "POST" 
     // request.httpBody = jsonData 
     //request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") 

     let task = URLSession.shared.dataTask(with: request as URLRequest){ data,response,error in 
      if error != nil { 

       return 
      } 

      do { 
       let userObject = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: String] 
       if userObject != nil { 

        // do something 
       } 

      } catch let jsonError { 
       print(jsonError) 
       print(String(data: data!, encoding: String.Encoding.utf8)!) 
      } 
     } 

     task.resume() 
+0

ich SwiftyJSON und all meinen Code in GetJSON arbeitet mit anderem Web-APIs bin mit. – raginggoat

Verwandte Themen